gpt4 book ai didi

docker - 无法访问Docker容器之外的服务

转载 作者:行者123 更新时间:2023-12-02 20:19:30 24 4
gpt4 key购买 nike

我确定我在做一些简单的错误,但是我无法在Mac上让docker正确公开端口。这是我在做什么:

从头开始在主机上:

> rails -v
Rails 5.0.0.1
> rails new dt6
# ... rails creates a new app
> cd dt6

然后,将这个Dockerfile添加到rails应用的根目录:
FROM ruby:2.3.1

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

EXPOSE 3000

然后我构建图像并运行容器
> docker build -t dt6 .

> docker run --rm -p 3000:3000 dt6 rails s
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.6.0 (ruby 2.3.1-p112), codename: Sleepy Sunday Serenity
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

看起来像是普通的“我已经准备好开始服务”了。但是,从主机上,我无法访问rails服务器:
> curl localhost:3000
curl: (52) Empty reply from server

我知道docker正在使用端口3000做某事,因为对于随机端口,我会收到不同的消息:
> curl localhost:3001
curl: (7) Failed to connect to localhost port 3001: Connection refused

值得注意的是,rails服务器正在运行。如果我连接到容器并从内部撞击Rails服务器,则它可以工作:
> docker exec -it dt6_container bash
root@6af33aa9c43b:/myapp# curl localhost:3000
<!DOCTYPE html>
<html>
<head>
#... a normal html response from the rails server

TLDR:在docker容器中运行Rails服务器,从主机访问服务器时收到空响应。如果我想能够从该容器外部向运行在该容器中的Rails服务器发出http请求,那我在做错什么?

最佳答案

尝试将CMD ["rails", "server", "-b", "0.0.0.0"]之后的EXPOSE 3000添加到您的docker文件中。

关于docker - 无法访问Docker容器之外的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39824091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com