python 在Docker撰写/Dockerfile容器中找不到Shell文件

ldioqlga  于 2022-11-21  发布在  Python
关注(0)|答案(4)|浏览(261)

我有多个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脚本。

ie3xauqp

ie3xauqp1#

您应该明确指定运行脚本时使用的shell解释器。
将最后一行更改为CMD ["bash", "-c", "./run.sh"]可能会解决您的问题。

c0vxltue

c0vxltue2#

您需要chmod run.sh才能执行:

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

RUN chmod +x run.sh

CMD ["./run.sh"]
vlurs2pr

vlurs2pr3#

如果你需要运行三个独立的长时间运行的进程,不要试图通过shell脚本来编排它们。相反,启动三个独立的容器。如果你通过Compose运行这个,这是很简单的:我有三个容器都运行相同的映像,但是覆盖command:来运行不同的主进程。

version: '3.8'
services:
  producer:
    build: .
    command: ./producer.py
  consumer:
    build: .
    command: ./consumer.py
  test_conn:
    build: .
    command: ./test_conn.py

确保脚本是可执行的(在您的主机系统上运行chmod +x producer.py,并将其提交给源代码管理),开始“shebang”行#!/usr/bin/env python3作为第一行。

tkqqtvp1

tkqqtvp14#

对于那些遇到同样问题的人,在Dokcer文件中的CMD ["bash", "-c", "./run.sh"]之前添加RUN sed -i -e 's/\r$//' run.sh对我来说是有效的。

相关问题