在 Dockerfile 中,我使用:
EXPOSE 8888
所以,我运行容器:
docker run --name some-app --link some-redis:redis -d app
在输出中我有这个字符串:
c980349b5b2120064fc197b00a1aaf94aa16c788b66cb148da7826bb5488d0db
然后我想知道ip,我可以从浏览器连接:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' c980349b
5b2120064fc197b00a1aaf94aa16c788b66cb148da7826bb5488d0db
返回 172.17.0.20
我转到网络浏览器并在页面http://172.17.0.20:8888
上,但我在Chrome中
ERR_CONNECTION_TIMED_OUT
问题是什么以及如何解决这个问题?
谢谢!
更新
Dockerfile:
FROM python:3.4.3-slim
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY app.py /usr/src/app/
COPY requirements.txt /usr/src/app/
RUN pip install -r requirements.txt
CMD [ "python", "./app.py" ]
EXPOSE 8888
当我使用时:
docker exec -it some-app bash
netstat -tulnp | grep 8888
它返回了:
bash: netstat: command not found
和
docker logs some-app
什么都不返回
答案 0 :(得分:2)
我会检查两次图像,因为似乎容器没有任何进程侦听端口8888.要调试问题,您可以在容器内运行shell会话并检查进程是否正在侦听,检查容器日志或者如果有任何日志你可以检查内部的任何文件,... IE:
$ sudo docker logs some-app (check container log)
$ sudo docker exec -it some-app bash (run an interactive shell)
# netstat -tulnp | grep 8888 (check if any process is listening)
如果你没有看到问题,我会要求你发布你的应用程序Dockerfile和
除此之外,如果您使用容器ip访问您的服务,则不需要在Dockerfile中使用EXPOSE 8888
。 EXPOSE
用于在使用-P
选项运行容器时将这些端口发布到主机的随机端口。