关于Docker无法在宿主执行容器命令

2020-11-14 · xiejiahe

很多情况需要在 宿主 运行容器内的命令, 比如需要在宿主运行容器 nginx / redis / 等命令

有2种方法可以执行容器命令:

1、用内联重定向 EOF

docker exec -it c6261194df8e /bin/bash << EOF
touch /home/inner.txt
EOF

2、docker 参数-c 可以执行容器shell

docker exec -it c6261194df8e /bin/bash -c "touch /home/inner.txt"

用上面2种方法会发现虽然执行了,但是并没有在容器内创建文件,不信可以试试。

目前我还没知道什么问题。

执行Shell脚本解决

既然无法在宿主内执行容器内的Shell,那是不是可以执行容器Shell脚本?

写 Shell 脚本得有编辑器,容器默认不带 vim,所以得先安装:

apt-get update && apt-get install vim

Shell 脚本, 这里是Demo,实际参照自己需要执行的Shell。

ci.sh 内容如下:

#!/bin/bash

echo "hello" >> /home/inner.txt

来试试

docker exec -it c6261194df8e /bin/bash -c "/bin/bash /opt/ci.sh"

然后进入容器会发现 /home 目录下确实有 inner.txt 文件,说明这思路是可以的。

对了,执行容器内的外建命令记得用绝对路径执行,例如:

# 必须
/bin/nginx -s reload

# 这样不行的,因为有些外建命令没有加入环境变量
nginx -s reload
其他
原创文章,转载请注明出处。