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

6qftjkof  于 2023-04-05  发布在  Docker
关注(0)|答案(1)|浏览(209)

我想在docker容器中 Package 一个脚本,并且只使用几个dynamic参数调用,每天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

问:我如何 Package 一个脚本并带参数运行它,但总是重用同一个容器,而不是像上面那样每次都重新创建它?
这是我的代码:
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容器上开箱即用。

iszxjhcz

iszxjhcz1#

听起来你的实际问题是你的日志基础设施收集容器名,而 name 在脚本的不同调用之间是不同的。
如果是这种情况,则docker-compose run采用--name选项来直接设置容器名称

docker-compose run \
  --name docker-example-run \
  --rm \
  example \
  param1 param2

这个名字需要在所有当前存在的容器中是唯一的,但是它可以重用以前删除的容器中的名字。容器本身并不是特别有价值(它只是包含脚本进程),在这个例子中,我使用docker-compose run --rm在完成后清理容器。

相关问题