无法访问Docker容器外部的服务
问题描述:
我确信我正在做一些简单的错误,但是我无法在我的Mac上获得Docker正确公开端口。下面是我在做什么:无法访问Docker容器外部的服务
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
然后我打造形象:
> rails -v
Rails 5.0.0.1
> rails new dt6
# ... rails creates a new app
> cd dt6
然后我在Rails应用程序的根目录中添加此Dockerfile:
从头主机上启动并运行容器
> 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
我知道码头工人做东西有3000端口,因为我得到一个随机端口不同的信息:
> curl localhost:3001
curl: (7) Failed to connect to localhost port 3001: Connection refused
值得注意的是,导轨服务器是正在运行。如果我连接到容器从里面打导轨服务器,它的工作原理:
> docker exec -it dt6_container bash
[email protected]:/myapp# curl localhost:3000
<!DOCTYPE html>
<html>
<head>
#... a normal html response from the rails server
TLDR:运行在泊坞窗容器中轨服务器,当我从访问服务器,我得到一个空响应主机。如果我希望能够向其外部的容器中运行的Rails服务器发出http请求,那么我做错了什么?
答
尝试在EXPOSE 3000
之后将CMD ["rails", "server", "-b", "0.0.0.0"]
添加到您的泊坞窗文件中。
在我看来,你所做的在Linux中可以正常工作,但不能在Mac或Windows中使用(或多或少)一个虚拟机模拟从https://www.viget.com/articles上的Linux – user2915097
摘录/ how-to-use-docker-on-os-x-the-missing-guide'curl $(boot2docker ip):49153'(这是一个例子) – user2915097
您是使用Docker for Mac还是Docker机器/ Docker工具箱? –