无法从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列留空)