我想在docker容器中包装一个脚本,并且只调用几个动态每天1-2次:docker-compose run example param1 param2
虽然下面的工作如预期的那样,run
命令每次执行都会创建一个新的容器:docker container ls -a
docker-example-run-6bfcb8ba24c8
docker-example-run-e7b7c8e8282a
docker-example-run-uja78212j1js
问题:我怎么能有一个脚本包装和运行它与参数,但总是重用相同的容器,而不像上面每次重新创建它?
这是我的代码:
docker-compose.yml
:
version: '3.8'
services:
example:
container_name: example
build: .
Dockerfile
:
# syntax=docker/dockerfile:1
FROM debian:buster-slim
COPY /scripts/example.sh /opt/app/entrypoint.sh
RUN chmod +x /opt/app/entrypoint.sh
ENTRYPOINT ["/opt/app/entrypoint.sh"]
example.sh
:
#!/bin/bash
echo Your container args are: "$@"
sleep 5 # real world process
echo finished
旁注:我知道我可以使用--rm
标志来自动删除容器一旦完成。但是我更喜欢创建一个没有神秘id的容器,因为docker logs
也不会在那些id容器上开箱工作。
听起来您的实际问题是您的日志基础设施收集了容器名称,并且名称在脚本的不同调用之间是不同的。
如果是这种情况,docker-compose run
使用--name
选项直接设置容器名称
docker-compose run
--name docker-example-run
--rm
example
param1 param2
名称需要在所有当前存在的容器中是唯一的,但它可以重用以前删除的容器中的名称。容器本身并不是特别有价值(它只包含脚本进程),在本例中,我使用docker-compose run --rm
在完成后清理容器。