首页 > 解决方案 > 在 docker exec 命令之间保存当前目录

问题描述

我有一个命令列表,我需要一个一个地向正在运行的 docker 容器发出这些命令。但是,当我在容器中“cd”时,它没有按预期工作。例如:

docker run -di --name example alpine:latest

for CMD in 'mkdir -p example && touch example/file' 'cd example' 'ls'
do
  docker exec -w='/root' example sh -c "$CMD"
done

将打印输出example而不是file. 我应该如何正确执行一系列语句,但在它们执行之间保留工作目录?最好,如果可以在不连接所有命令的情况下做到这一点?

标签: dockershexecdocker-exec

解决方案


我认为你应该使用这种格式:

dingrui@gdcni:~/onie$ docker exec -w /root example sh -c 'mkdir -p example; touch example/file; cd example; ls'
file

或者将这些命令写入脚本,然后将其挂载到容器并在容器中运行:

dingrui@gdcni:~/onie$ docker run -itd -w /root -v $(pwd):/app --name example busybox /app/test.sh
12f7f2b55182bd18c45ce31e03390544adaedc1a2dd923d3bc4293b214301650
dingrui@gdcni:~/onie$ docker logs example 
file

推荐阅读