如何从同一个imag在并行容器中运行不同的python脚本

2024-05-17 13:22:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试做一些非常简单的事情(我想),我想做一个docker镜像,并在并行运行的容器中从同一个映像启动两个不同的脚本。在

简单到

“Hello容器->”

容器2->打印(“世界”)

我做了一些研究,但有些技术似乎有点过度设计,而其他一些则做了类似的事情

CMD ["python", "script.py"] && ["python", "script2.py"]

这不是我要找的。在

我想看看

^{pr2}$

但是运行两个不同的脚本。在

我对这一切还是相当陌生的,所以如果这是一个愚蠢的问题,我提前道歉,并感谢大家与我合作。在


Tags: dockerpygt脚本cmdhello镜像世界
3条回答

您可以使用Docker Compose轻松完成此操作。下面是一个简单的docker-compose.yml文件,只是为了说明这个想法:

version: '3'

services:
  app1:
    image: alpine
    command: >
      /bin/sh -c 'while true; do echo "pre-processing"; sleep 1; done'

  app2:
    image: alpine
    command: >
      /bin/sh -c 'while true; do echo "post-processing"; sleep 1; done'

如您所见,这两个服务使用相同的映像,alpine,但它们运行的命令不同。执行docker-compose up并查看输出:

^{pr2}$

在您的例子中,您只需将图像更改为您的图像,例如myimage:v1,并更改服务命令,以便第一个服务定义具有command: python script1.py行,第二个服务定义command: python script2.py。在

如果您设置使用相同的图像,那么我建议您将ENTRYPOINT设置为python,然后使用docker run命令通过提供scrips作为CMD来启动容器,如下所示:

Dockerfile文件:

FROM python

...

ENTRYPOINT ["python"]

使用docker run命令

^{pr2}$

这将启动两个容器,每个容器运行单独的脚本

但是-我希望保持图像的干净,不需要任何额外的脚本或包来运行我的服务,所以在这种情况下,我只需创建两个单独的映像,每个映像都有一个脚本,然后以类似的方式运行它们。在

示例:

FROM python

COPY script.py script.py

ENTRYPOINT ["python"]

CMD ["script.py"]

第二幅图像:

FROM python

COPY script2.py script2.py

ENTRYPOINT ["python"]

CMD ["script2.py"]

然后把它们构建成单独的图像,然后像以前一样运行

试试这些步骤,它应该会有用的。在

  • 创建包含以下内容的Dockerfile
FROM python:3.7-alpine
COPY script1.py /script1.py
COPY script2.py /script2.py
CMD ["/bin/sh"]
  • script1.py
^{pr2}$
  • script2.py
print("World")
  • 构建docker映像docker build -t myimage:v1 .
  • 运行容器
$ docker run -it --rm --entrypoint python myimage:v1 /script1.py
Hello
$
$ docker run -it --rm --entrypoint python myimage:v1 /script2.py
World
$

注意:这里我们使用相同的docker映像myimage:v1,只是在每个docker运行命令中更改入口点。在

更多信息here。在

希望这有帮助。在

相关问题 更多 >