我试图在 Docker 容器内运行 bash,docker exec bash -c
通过回显将在条件语句中使用的内容,将其输出存储在主机(而不是容器)上。我可以回显任何内容,例如 IP 主机名或只是一个字符串。问题是echo
输出:
$ var1=$(docker exec -t test_masternode1 bash -c 'echo 1')
$ echo $var1
1
$ declare -p var1
"eclare -- var1="1
$ var2=1
$ declare -p var2
declare -- var2="1"
$ echo $var2
1
$ if [ "$var1" == "$var2" ];then echo "same";else echo "not same";fi
not same
正如您所看到的,var1
和var2
都是,1
但if
测试else
失败了。此外,变量声明输出未对齐。 Docker 容器的输出出现问题;不确定那是什么。
我还尝试了 Ubuntu 中的另一个 Docker 镜像。上面的例子来自 CentOS 7。
$ var3=`docker run -t ubuntu bash -c 'echo 1'`
$ declare -p var3
"eclare -- var3="1
答案1
数据从 Docker 中以回车符返回。输出回车符时,会使光标移动到行首。因此,当您显示变量的值时,输出看起来有点奇怪。对于其他人来说,这似乎也是(或曾经是)一个问题,这一点可以明显看出这个 GitHub 问题。
要从数据中删除任何回车符,请将其传递给tr -d '\r'
:
var1=$(docker exec -t test_masternode1 bash -c 'echo 1' | tr -d '\r')
...或者只是运行不带选项的命令-t
。该-t
选项docker exec
分配docker run
一个伪 TTY,只有交互式命令才真正需要它。该命令echo 1
不是这样的命令。