繁体   English   中英

Docker 仅在我停止容器时执行 python 脚本

[英]Docker executes python scripts only when I stopping the container

我正在尝试为我的 python 应用程序构建一个 Docker 映像(aiohttp 上的一个小 api,带有几个端点)

FROM python:3

WORKDIR /home/emil/Projects/elastic_simple_engine

COPY . .

RUN pip3 install -r requirements.txt

EXPOSE 5000/tcp

CMD ["python3", "entry.py"]

Dockerfile 的最后一行运行一个 python 脚本,它启动aiohttp.web.Application()

# entry.py

# ...a few dozens of code lines above...
if __name__ == '__main__':
    print('Initializing...')
    aiohttp.web.run_app(app, host='127.0.0.1', port=5000)

构建映像后,我尝试运行容器: $ docker run -p 5000:5000 myapp
Docker 静默运行容器,shell 中没有任何输出,但我无法访问我的应用程序的主机: 127.0.0.1:5000 : 127.0.0.1:5000 (当我在没有 docker 的情况下启动它时,一切正常。
只有当我停止容器时,它才会在控制台中打印应在应用程序启动和关闭期间显示的行:

Initializing...
======== Running on http://127.0.0.1:5000 ========
(Press CTRL+C to quit)

请帮我弄清楚我做错了什么。

TLDR

将主机设置为0.0.0.0


127.0.0.1是本地接口的 IP 地址。 它只能同一主机通信。

0.0.0.0意味着服务器(在此上下文中)将侦听每个可用的网络接口(包括127.0.0.1 )。

在这里,由于您没有共享 docker 网络,因此127.0.0.1仅在容器内部可用,而不能从容器外部使用。 您应该使用0.0.0.0从容器外访问,或通过--network="host"docker run ,但是这可能与端口共享等并发症。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM