Ben*_*ari 7 python bash docker docker-compose
我想创建一个包含两个 Python 包以及一个包含可执行文件的包的容器。
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
Run Code Online (Sandbox Code Playgroud)
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"]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
当我用 运行这个项目时docker-compose up --build
,只CMD
运行最后一个命令。因此,我认为前面的CMD
命令被杀死了,Dockerfile
因为当我删除最后两个时CMD
,第一个CMD
运行良好。
有没有办法在后台运行多个 Python 脚本和一个可执行文件?
我也尝试过使用 bash 文件也没有成功。
正如文档中提到的,docker文件中只能有一个CMD,如果有更多,最后一个会覆盖其他并生效。使用 docker 的一个关键点可能是隔离您的程序,因此乍一看,您可能希望将它们移动到单独的容器中并使用共享卷或 docker 网络相互通信,但如果您确实需要它们运行同一个容器,将它们包含在 bash 脚本中,并用 CMD 替换最后一个 CMDrun.sh
将它们并排运行:
#!/bin/bash
exec python3 /path/to/script1.py &
exec python3 /path/to/script2.py
Run Code Online (Sandbox Code Playgroud)
添加COPY run.sh
到 Dockerfile 并使用RUN chmod a+x run.sh
以使其可执行。CMD 应该是CMD ["./run.sh"]
通过entrypoint.sh 尝试一下
ENTRYPOINT ["/docker_entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
docker_entrypoint.sh
#!/bin/bash
set -e
exec python3 not__main__.py &
exec python3 __main__.py
Run Code Online (Sandbox Code Playgroud)
符号&
表示您在后台将服务作为守护进程运行
归档时间: |
|
查看次数: |
14412 次 |
最近记录: |