如何使用 Docker 运行多个 Python 脚本和一个可执行文件?

新手上路,请多包涵

我想创建一个包含两个 Python 包的容器以及一个包含可执行文件的包。


这是我的主包 (dockerized_package) 树:

 dockerized_project
├── docker-compose.yml
├── Dockerfile
├── exec_project
│   ├── config
│   │   └── config.json
│   ├── config.json
│   ├── gowebapp
├── pythonic_project1
│   ├── __main__.py
│   ├── requirements.txt
│   ├── start.sh
│   └── utility
│       └── utility.py
└── pythonic_project2
    ├── collect
    │   ├── collector.py
    ├── __main__.py
    ├── requirements.txt
    └── start.sh

Dockerfile 内容:

 FROM ubuntu:18.04

RUN apt update
RUN apt-get install -y python3.6 python3-pip python3-dev build-essential gcc \
    libsnmp-dev snmp-mibs-downloader

RUN pip3 install --upgrade pip

RUN mkdir /app
WORKDIR /app
COPY . /app

WORKDIR /app/snmp_collector
RUN pip3 install -r requirements.txt
WORKDIR /app/proto_conversion
RUN pip3 install -r requirements.txt

WORKDIR /app/pythonic_project1
CMD python3 __main__.py

WORKDIR /app/pythonic_project2
CMD python3 __main__.py

WORKDIR /app/exec_project
CMD ["./gowebapp"]

docker-compose 内容:

 version: '3'

services:
  proto_conversion:
      build: .
      image: pc:2.0.0
      container_name: proto_conversion
#      command:
#        - "bash  snmp_collector/start.sh"
#        - "bash  proto_conversion/start.sh"
      restart: unless-stopped
      ports:
        - 8008:8008
      tty: true

问题:

当我使用 docker-compose up --build 运行这个项目时,只有最后一个 CMD 命令运行。 Hence, I think the previous CMD commands are killed in Dockerfile because when I remove the last two CMD , the first CMD works well .

有没有办法在后台运行多个 Python 脚本和一个可执行文件?

我也尝试过使用 bash 文件,但也没有成功。

原文由 Benyamin Jafari - aGn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
1 个回答

文档 中所述,docker文件中只能有一个CMD,如果有多个则最后一个覆盖其他并生效。使用 docker 的一个关键点可能是隔离你的程序,所以乍一看,你可能希望将它们移动到单独的容器中并使用共享卷或 docker 网络相互通信,但如果你真的需要它们在同一个容器,将它们包含在 bash 脚本中并将最后一个 CMD 替换为 CMD run.sh 将同时运行它们:

 #!/bin/bash

exec python3 /path/to/script1.py &
exec python3 /path/to/script2.py

COPY run.sh 添加到 Dockerfile 并使用 RUN chmod a+x run.sh 使其可执行。 CMD 应该是 CMD ["./run.sh"]

原文由 Farzad Vertigo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题