docker-编写如何 运行 2 个长 运行ning 作业

docker-compose how to run 2 long running jobs

我有 2 个无限进程,我试图 运行 在同一个容器中。假设进程中有 2 个是使用 jupyter notebook 的,另一个是自定义 python 文件,workflow.py。 Workflow.py 有一个无限循环,多次下载文件。我正在尝试 运行 他们都使用以下命令:

version: '3'

volumes:
  web_local_postgres_data: {}
  web_local_postgres_data_backups: {}

services:
  notebook:
    build:
      context: .
      dockerfile: ./compose/local/worker/Dockerfile
    image: jupyter/pyspark-notebook
    volumes:
      - ../../:/home/jovyan/work
    ports:
      - "8888:8888"
    command: nohup python /home/jovyan/work/worflow.py & && nohup start.sh jupyter notebook

我尝试了几种命令结构,但无法实现我想要的。任何帮助,将不胜感激。提前致谢。

您通常 运行 一个容器中只有一个进程,因此要 运行 两个进程,您将启动两个容器。在每个容器中 运行 您想要 运行 作为前台进程的单个命令,根据需要覆盖 command:

由于您已经 运行在 Compose 中进行了此设置,因此可以直接添加具有基本相同设置的其他容器:

version: '3.8'
x-service-setup: &service-setup
  build:
    context: .
    dockerfile: ./compose/local/worker/Dockerfile
  volumes:
    - ../../:/home/jovyan/work
services:
  notebook:
    <<: *service-setup
    ports:
      - "8888:8888"
    command: start.sh jupyter notebook
  workflow:
    <<: *service-setup
    command: /home/jovyan/work/workflow.py

如果您确实想尝试将两个单独的进程强制放入同一个容器中,请记住必须有一些 前台进程,否则容器将立即退出。使用单独的容器还可以让您注意到一个进程或另一个进程已崩溃并重新启动它;使用 single-container 设置,您无法注意到该工作流过程已经退出。