无法从网络上的其他计算机浏览dockerized Web应用程序

时间:2015-09-07 17:56:07

标签: macos docker portforwarding

我希望与我的Mac在同一网络上的任何计算机都能够访问在我的Mac上运行的dockerized Rails网络应用程序。

在我的Mac(10.9.5)上,当我通过docker ip和我指定的端口访问时,我的Rails 4.2.4 Web应用程序在Docker中正常运行,192.168.99.100:3000

Docker 1.8.1在Virtualbox 5.0.2下运行。

我正在使用Docker-compose,而docker-compose.yml文件的相关部分是:

web:
  build: .
  command: 'bash -c ''bundle exec unicorn -p $PORT -c ./config/unicorn-local.rb'''
  working_dir: /app/user
  env_file:
    - .docker_dev_env_config
    - .docker_dev_env_personal
  environment:
    PORT: 3000
    DATABASE_URL: 'postgres://postgres:@herokuPostgresql:5432/postgres'
  ports:
    - '3000:3000'
  links:
    - herokuPostgresql

我的Dockerfile是

FROM heroku-ruby2.0.0 # a local image based on heroku/ruby with ruby 2.0.0
EXPOSE 3000
ENV widget foo

我的Mac在本地网络上的IP地址始终设置为192.168.0.33。

如何允许本地网络上的测试人员通过192.168.0.33:3000访问正在运行的dockerized app?

(如果我在Vagrant下运行我的网络应用程序 - 而不是Docker - 网络上的其他测试人员可以通过浏览192.168.0.33:3000访问网络应用程序。我的Vagrant也在Virtualbox下运行。我的Vagrantfile包含{{1但是我没有看到docker-compose.yml的任何等价物)

2 个答案:

答案 0 :(得分:1)

您需要将端口3000从VM转发到本地主机。为此,您可以运行以下脚本

VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port$3000,tcp,,$3000,,$3000";
  VBoxManage modifyvm "boot2docker-vm" --natpf1 "udp-port$3000,udp,,$3000,,$3000";

这将转发到您的localhost。如果要将端口转发到其他某个接口,则必须在命令中提供该接口的IP地址。这是--natpf命令

的一般语法
[--natpf<1-N> [<rulename>],tcp|udp,[<hostip>],<hostport>,[<guestip>],<guestport>]

所以你可以相应地修改它。 请参阅此内容以进一步阅读。 Docker on Mac. The Missing Guide

答案 1 :(得分:0)

&#39;默认&#39;使用docker-toolkit的Docker Quickstart Terminal应用程序时创建的Virtualbox除了定义的ssh之外没有任何端口。

使用VirtualBox和Docker时,Mac上的解决方案是:

  • 运行VirtualBox
  • 点击&#39;默认&#39;框(或Docker设置使用的任何框)
  • 转到&#39;设置&gt;网络&gt;适配器1
  • 点击“端口转发”
  • 创建一个新规则,下面的示例为3000到3000 (务必将主机ip列留空)

setting up port forward on vagrant