无法从networking上的其他计算机浏览docker化的networking应用程序

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

在我的Mac(10.9.5)我的Rails 4.2.4 Web应用程序在Docker中运行正常,当我通过docker ip和我分配的端口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在本地networking上的IP地址始终设置为192.168.0.33。

如何让本地networking上的testing人员通过192.168.0.33:3000访问正在运行的dockerized应用程序?

(FWIW,如果我在Vagrant下运行我的Web应用程序 – 而不是Docker – networking上的其他testing者可以通过浏览192.168.0.33:3000来访问Web应用程序,我的Vagrant也在Virtualbox下运行,我的Vagrantfile包含config.vm.network :forwarded_port, guest: 3000, host: 3000但我没有看到任何相当于docker-compose.yml)

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

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

这将转发到您的本地主机。 如果您想要转发到其他某个接口,则必须在该命令中提供该接口的IP地址。 这是--natpf命令的一般语法

 [--natpf<1-N> [<rulename>],tcp|udp,[<hostip>],<hostport>,[<guestip>],<guestport>] 

所以你可以相应地修改它。 请参考这个进一步阅读。 在Mac上的Docker。 失踪指南

使用docker-toolkit的Docker Quickstart Terminal应用程序时创build的“默认”Virtualbox没有任何其他端口,而不是定义的ssh。

在使用VirtualBox和Docker时,Mac上的解决scheme是:

  • 运行VirtualBox
  • 单击“默认”框(或Docker安装程序使用的任何一个框)
  • 去'设置>networking>适配器1
  • 点击“端口转发”
  • 下面的例子创build一个新的规则从3000到3000(一定要把主机的IP列留空)

在流浪汉上设置端口