我想编写一个shell脚本,该脚本会进入一个正在运行的docker容器,编辑一个特定的文件,然后退出它。
我最初的尝试是这样-
将以下命令粘贴到其中
docker exec -it container1 bash
sed -i -e 's/false/true/g' /opt/data_dir/gs.xml
exit
运行脚本-
bash ./run.sh
但是,一旦脚本进入container1,它将登陆到其bash终端。好像整个脚本一进入容器就会中断,而将包含脚本的父容器留在后面。
答案 0 :(得分:1)
我认为你很亲密。您可以尝试以下操作:
docker exec container1 sed -i -e 's/false/true/g' /opt/data_dir/gs.xml
说明:
-it
用于交互式会话,因此您在这里不需要它。sed
)。您不必通过bash运行sed
答案 1 :(得分:1)
使用下面的代码可以解决问题
myHostName="$(hostname)"
docker exec -i -e VAR=${myHostName} root_reverse-proxy_1 bash <<'EOF'
sed -i -e "s/ServerName .*/ServerName $VAR/" /etc/httpd/conf.d/vhosts.conf
echo -e "\n Updated /etc/httpd/conf.d/vhosts.conf $VAR \n"
exit