Docker-Compose脚本未运行



我对Docker很陌生,特别是对Docker -compose,我遇到了一个问题,我似乎无法解决。

我有一个docker-compose.yml文件,看起来像

version: '3.7'
services:
backup:
build: 
context: .
dockerfile: Dockerfile
command: sh -c "while :;do sleep 5; done"
tty: true
stdin_open: true
volumes:
- ./data:/app/data

我有一个名为start.sh的文件它看起来很简单,就像

python3 -u ./upload_to_s3.py > log/upload_to_s3.f9beb4d9.out 2>&1 &

当我运行docker-compose exec backup /bin/sh时,我可以进入docker映像,我可以运行./start.sh,它将运行我的进程,我可以通过一个简单的ps aux来验证。但是,当我运行

docker-compose exec backup sh start.sh

它似乎根本不运行。

我试图通过返回到图像并运行ps aux来验证,事实上,python脚本没有运行。

怎么回事?为什么我不能用docker-compose来运行我的start.sh文件?

编辑:我也试着用docker-compose run --rm --detach --entrypoint="sh" backup -c "/app/start.sh"运行这个,我得到完全相同的问题

您所展示的脚本启动了一个后台进程。但是,如果这是在docker exec调试shell的上下文中运行,只要docker exec命令完成,任何仍在运行的后台进程将被终止。

我可能会在一个临时容器而不是docker exec会话中运行它。重要的是将其作为前台进程运行,而不是启动后台作业。例如:

docker-compose run backup 
./upload_to_s3.py

docker-compose run将继承backup容器的许多设置,就像它的image:volumes:挂载一样,但是您可以指定要在命令行上运行的command:。这也为您省去了让无意义的容器存活的麻烦,以便稍后可以将docker exec放入其中;为这些一次性任务运行一个新的容器。

(注意,我在这里展示的特定调用假设Python脚本被标记为可执行的,如果需要则使用chmod +x;它以"shebang"开头;像#!/usr/bin/env python3;并且图像设置了一个环境变量ENV PYTHONUNBUFFERED=1。)

最新更新