【发布时间】:2023-04-08 06:29:01
【问题描述】:
我有一个脚本,我想有选择地在容器中运行它。我观察到,如果我运行一个中间脚本,它可以被 Ctrl-C 杀死,但是如果我不这样做,它就不能。
这是一个例子:test1.sh:
#!/bin/bash
if [ "${1}" = true ]; then
while true; do echo "args: $@"; sleep 1; done
else
docker run --rm -it $(docker build -f basic-Dockerfile -q .) /test2.sh $@
fi
test2.sh:
#!/bin/bash
/test1.sh true $@
basic-Dockerfile:
FROM alpine:3.7
RUN apk add --no-cache bash
COPY test1.sh test2.sh /
ENTRYPOINT ["bash"]
运行./test1.sh true foo bar 将愉快地打印出true foo bar,运行./test1.sh foo bar 将在容器中执行相同的操作。发送Ctrl-C 将终止进程并按预期删除容器。
但是,如果我尝试通过将 /test2.sh $@ 更改为 /test1.sh true $@ 来消除对额外文件的需求:test1.sh
#!/bin/bash
if [ "${1}" = true ]; then
while true; do echo "args: $@"; sleep 1; done
else
docker run --rm -it $(docker build -f basic-Dockerfile -q .) /test1.sh true $@
fi
那么进程不能再用Ctrl-C 终止,而是必须用docker kill 停止。
为什么会这样?
Docker 版本 18.06.1-ce 在 WSL 中的 Windows 10 上运行
【问题讨论】:
标签: docker