如何将动态参数传递给docker-compose(无需重新创建新的容器id)?



我想在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在完成后清理容器。

相关内容

  • 没有找到相关文章

最新更新