我刚使用自制软件在我的Mac上安装了Docker和Docker-Toolbox:install docker with homebrew
创建和配置带有Rails的Container,Postgres和启动docker-compose后,一切看起来都不错,但我无法从主机访问网络服务器。
的输出
$ docker-compose up
dummy_1 | I, [2016-03-30T14:55:53.130639 #6] INFO -- : listening on addr=0.0.0.0:8000 fd=10
当我在谷歌浏览器中输入网址http://0.0.0.0:8000/我得到
This site can’t be reached
0.0.0.0 refused to connect.
ERR_CONNECTION_REFUSED
所以我试过
$ docker-machine env dummy
使用以下输出:
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/choi/.docker/machine/machines/dummy"
export DOCKER_MACHINE_NAME="dummy"
当我在Chrome http://192.168.99.100:2376
中尝试时,我会下载一个空白文件。为什么会这样?我希望我的Rails应用程序的默认问候页面。
答案 0 :(得分:22)
192.168.99.100
是您的Docker主机的IP。您需要公开容器的端口,然后您就可以从外部世界连接到它。
我不熟悉Docker Compose,但是您发布的日志表明端口8000已暴露。因此,请尝试http://192.168.99.100:8000
。
(http://192.168.99.100:2376
不起作用的原因是因为这是Docker守护程序本身的地址和端口,它不是基于HTTP的。至于0.0.0.0
:这是你的地址Web服务器正在内部容器中侦听并等同于其中的所有外部连接。但是,如果没有暴露任何端口,则无法进入!)
答案 1 :(得分:14)
对于那些尝试localhost:4000
而the tutorial表示但失败的人:
输入此
$ docker-machine env
并获得结果
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/choi/.docker/machine/machines/dummy"
export DOCKER_MACHINE_NAME="dummy"
所以你得到了ip:192.168.99.100
然后访问192.168.99.100:4000
,ip:your_port
答案 2 :(得分:8)
在公开端口后,您可以通过docker创建的内部IP地址访问Web应用程序。您可以使用运行命令的容器名称来获取IP地址:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' 'container name here'
让我们说你得到了IP 172.17.0.2
。您可以运行open http://172.17.0.2:8000
答案 3 :(得分:8)
您可以通过这种方式找到正确的地址来呼叫您的网页 首先,通过以下方式找到CONTAINER ID:
$ docker ps
您将获得以下信息:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56dd4d582b08 abc01 "python app.py" 10 minutes ago Up 11 minutes 80/tcp, 0.0.0.0:80->4000/tcp flamboyant_bell
现在您知道端口:4000。因此地址应该是这样的:
http://192.168.99.100:4000/
但是,您可以仔细检查:
$ docker port 56dd4d582b08
在这种情况下,您将获得以下信息:
4000/tcp -> 0.0.0.0:80
现在你可以试着看看你的项目
http://192.168.99.100:4000/
答案 4 :(得分:0)
虽然此解决方案确实有效,但对我为什么以这种方式起作用并没有多大意义。来自该环境的IP地址甚至不在我的网络上(并且与我的IP v4静态IP地址或本地主机回送地址127.0.0.1不匹配);
$ docker-machine env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
标准(apache,码头,tomcat等)是转发到localhost(127.0.0.1),为什么docker也不能这样做?
答案 5 :(得分:0)
您可以分享您的docker-compose yaml吗?您需要在“ ports”条目下添加详细信息,以将端口从本地主机映射到容器
ports:
- "4001:8001"