在docker exec命令之间保存当前目录

在docker exec命令之间保存当前目录,docker,sh,exec,docker-exec,Docker,Sh,Exec,Docker Exec,我有一个命令列表,我需要一个接一个地向正在运行的docker容器发出这些命令。然而,当我在容器中“cd”时,它并没有像预期的那样工作。例如: docker run-di——名称示例:最新 对于“mkdir-p示例和触摸示例/文件”“cd示例”“ls”中的CMD 做 docker exec-w='/root'示例sh-c“$CMD” 完成 将打印出示例,而不是文件。我应该如何正确地执行一系列语句,但在执行之间保留工作目录?最好是在不连接所有命令的情况下执行此操作?我认为您应该使用以下格式: di

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

docker run-di——名称示例:最新
对于“mkdir-p示例和触摸示例/文件”“cd示例”“ls”中的CMD
做
docker exec-w='/root'示例sh-c“$CMD”
完成

将打印出
示例
,而不是
文件
。我应该如何正确地执行一系列语句,但在执行之间保留工作目录?最好是在不连接所有命令的情况下执行此操作?

我认为您应该使用以下格式:

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

是否需要在for循环内部运行这些命令?您可以简单地运行
docker run-di--name示例alpine:latest&&docker exec-w='/root'example sh-c“mkdir-p example;touch example/file;cd example;ls”
,这将按预期打印
文件。@adii我知道解决方法。虽然我想知道是否有可能在各州之间导航。实际上,我正在从yaml文件加载命令列表,并使用
docker exec
执行它们。但是任何包含
cd
的命令序列都将失败。我想知道是否有一种方法可以做到这一点,无需解析每个命令,动态更改workdir,或不连接命令。能否给出
cd
失败的最小示例?您所说的动态更改workdir是什么意思?当您传递`-w='/root`时,它将运行这个
'/root'
目录。我的意思是解析cd的命令,并在执行之前将
-w
设置为新的workdir
cd
不会像在fail to execute中那样失败,但每个新的docker exec都将workdir设置为其默认值。我想知道是否有一种方法可以避免连接命令,仅此而已。您实际上想做什么?您能否将此命令序列打包到脚本中以运行,或者更好地说,是否有一个可以触发此活动的网络可见端点
docker exec
是一个有用的调试工具,但它通常不是与容器交互的主要方式。将所有命令串联起来,并将它们作为env var传递给容器,然后运行类似于
docker exec'sh-c eval“${SCRIPT}”的操作可能更容易些。