use*_*412 14 networking docker dockerfile
首先设置:
没有 WSL2 的 Windows 10 - 旧的 Hyper-V 后端
Docker for Windows - Linux 容器。
我有一个小的 python 脚本:
from flask import Flask
server = Flask(__name__)
@server.route("/ping")
def hello():
return "Hello World!"
if __name__ == "__main__":
server.run(host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
当我在本地运行它(没有docker)时,我可以localhost:5000/ping
很好地到达。
Dockerfile:
FROM python:3.8-buster
RUN useradd -ms /bin/bash user
USER user
WORKDIR /home/user
COPY requirements.txt .
RUN pip install -r requirements.txt && rm requirements.txt
COPY app.py .
EXPOSE 5000
ENTRYPOINT [ "python", "app.py"]
Run Code Online (Sandbox Code Playgroud)
构建得很好。启动:docker container run -t test_tag -dp 5000:5000
启动后日志也正常:
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Run Code Online (Sandbox Code Playgroud)
但localhost:5000/ping
不起作用 - 连接失败。
但是运行 docker 示例docker run -dp 80:80 docker/getting-started
效果很好 - 我可以访问下面容器的网络服务器localhost:80
在两个容器上运行 dockerspect 显示出一个区别:我的容器有
"Ports": {
"5000/tcp": null
},
Run Code Online (Sandbox Code Playgroud)
在网络设置中,对于工作示例来说它是(更正确的外观)
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "80"
}
]
},
Run Code Online (Sandbox Code Playgroud)
所以看来所需的端口没有正确绑定。我需要做什么来绑定端口?
use*_*412 13
正如 David Maze 指出的那样,顺序对于 docker cmd 命令确实很重要。
该-dp
选项需要位于图像名称之前。
所以使用
docker container run -dp 5000:5000 -t test_tag
Run Code Online (Sandbox Code Playgroud)
奇迹般有效。
归档时间: |
|
查看次数: |
22119 次 |
最近记录: |