我已经构建了我的小型 Python(flask) 应用程序。容器在这里 docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4146fd976547 identidock_identidock:latest "/cmd.sh" 5 minutes ago Up 5 minutes 9090/tcp, 9191/tcp agitated_leakey
如果我尝试
curl localhost:5000
curl: (7) Failed to connect to localhost port 5000: Connection refused
我已经检查过 sudo netstat -an | grep -E "5000" unix 3 [ ] STREAM CONNECTED 25000
它不在 5000 上列出。带有端口的 yaml 行
ports:
- "5000:5000"
如果我执行我的容器
docker exec -it agitated_leakey /bin/bash
uwsgi@4146fd976547:/app$ netstat -ln
bash: netstat: command not found
我的 Dockerfile
RUN pip install Flask==0.10.1 uWSGI==2.0.8
WORKDIR /app
COPY app /app
COPY cmd.sh /
EXPOSE 9090 9191
为什么会发生这种情况?
答案1
另一个问题可能与模式有关。在发布部分,我必须mode
明确设置为主机,然后一切正常:
docker service create --name registry --publish published=5000,target=5000,mode=host registry:2
答案2
从 docker ps 的输出来看,你的端口还没有暴露。
$ docker run -d -p 5000:5000 flask-sample-one
运行映射端口的容器,如果仍然遇到同样的问题,请 ssh 到容器并使用以下命令。
netstat -lntp | grep :5000
似乎容器中未安装 netstat。您可以运行yum install netstat
来安装并检查。
这指南将帮助您进行验证。docker ps
最后检查输出。