我想在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容器上开箱即用。
1条答案
按热度按时间iszxjhcz1#
听起来你的实际问题是你的日志基础设施收集容器名,而 name 在脚本的不同调用之间是不同的。
如果是这种情况,则
docker-compose run
采用--name
选项来直接设置容器名称这个名字需要在所有当前存在的容器中是唯一的,但是它可以重用以前删除的容器中的名字。容器本身并不是特别有价值(它只是包含脚本进程),在这个例子中,我使用
docker-compose run --rm
在完成后清理容器。