【发布时间】:2021-08-03 18:25:59
【问题描述】:
我有一个 docker-compose 文件,其中包含如下配置的服务:
py_publisher:
build:
context: ./client
dockerfile: Dockerfile
deploy:
mode: replicated
replicas: 3
# entrypoint: "python3 mqtt_client.py"
镜像是从这个 Dockerfile 构建的:
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
WORKDIR /mqtt_client
COPY . .
RUN pip3 install -r requirements.txt
CMD ["python3", "mqtt_client.py"]
容器的主目录(/mqtt_client)包含:
Dockerfile mqtt_client.py requirements.txt
相关的docker-compose结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61b8f5e1e0bb e1d0fc27a640 "python3 mqtt_client…" 7 seconds ago Up 2 seconds mqtt-demo_py_publisher_1
9992b9c9031d e1d0fc27a640 "python3 mqtt_client…" 7 seconds ago Up 3 seconds mqtt-demo_py_publisher_2
a197f0f3126b e1d0fc27a640 "python3 mqtt_client…" 7 seconds ago Up 2 seconds mqtt-demo_py_publisher_3
问题在于 Python 命令实际上并没有“工作”。根本没有任何反应。但是,当我 exec 进入容器并运行该命令时,它工作正常。
我通过 docker-compose 运行和手动执行到容器中的方式有什么区别?
【问题讨论】:
-
容器已“启动”并且命令按预期显示,所以您的应用在启动时不会记录任何内容吗?
-
@OneCricketeer 不,该应用程序没有记录任何内容,但我知道它不起作用,因为我可以检查 Python 脚本在另一个应用程序中执行的操作的结果。当我在
exec'ed 时手动运行它时,它工作正常。 -
python -u选项或PYTHONUNBUFFERED环境变量是否有所不同;进程是否实际运行,但在进程中缓冲其输出? (例如参见Python app does not print anything when running detached in docker。) -
我是说你能在客户端脚本的主要方法中记录/打印任何东西吗?容器是否真的保持原状,而不是重新启动自己?如果
docker-compose logs为空,则似乎命令正在退出并出现错误 -
@DavidMaze no 我已经确认缺少输出是因为脚本根本没有运行。
标签: python python-3.x docker docker-compose dockerfile