我有多个Python脚本,我想在其中运行一个docker容器。从一个相关的问题How to run multiple Python scripts and an executable files using Docker?中,我发现最好的方法是让run.sh
成为一个shell文件,如下所示:
#!/bin/bash
python3 producer.py &
python3 consumer.py &
python3 test_conn.py
然后从Dockerfile调用此文件,如下所示:
FROM python:3.9
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app
RUN pip install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
CMD ["./run.sh"]
但是,在容器日志中,以下错误提示exec ./run.sh: no such file or directory
,这对我来说没有意义,因为我通过COPY . /usr/src/app
将当前目录(包括www.example.com)上的所有内容复制run.sh到了容器上的/usr/src/app
请克隆我的repo,并在根目录下调用docker-compose up -d,并检查myapp容器日志来帮助我。
https://github.com/Quilograma/IES_Project
谢谢你,谢谢你
无法在单个容器中运行多个python脚本。
4条答案
按热度按时间ie3xauqp1#
您应该明确指定运行脚本时使用的shell解释器。
将最后一行更改为
CMD ["bash", "-c", "./run.sh"]
可能会解决您的问题。c0vxltue2#
您需要chmod run.sh才能执行:
vlurs2pr3#
如果你需要运行三个独立的长时间运行的进程,不要试图通过shell脚本来编排它们。相反,启动三个独立的容器。如果你通过Compose运行这个,这是很简单的:我有三个容器都运行相同的映像,但是覆盖
command:
来运行不同的主进程。确保脚本是可执行的(在您的主机系统上运行
chmod +x producer.py
,并将其提交给源代码管理),开始“shebang”行#!/usr/bin/env python3
作为第一行。tkqqtvp14#
对于那些遇到同样问题的人,在Dokcer文件中的
CMD ["bash", "-c", "./run.sh"]
之前添加RUN sed -i -e 's/\r$//' run.sh
对我来说是有效的。