进入Docker容器并执行命令并最终退出的Shell脚本

时间:2018-07-18 14:51:21

标签: bash shell docker

我想编写一个shell脚本,该脚本会进入一个正在运行的docker容器,编辑一个特定的文件,然后退出它。

我最初的尝试是这样-

  1. 创建run.sh文件。
  2. 将以下命令粘贴到其中

    docker exec -it container1 bash
    sed -i -e 's/false/true/g' /opt/data_dir/gs.xml
    exit
    
  3. 运行脚本-

    bash ./run.sh
    

但是,一旦脚本进入container1,它将登陆到其bash终端。好像整个脚本一进入容器就会中断,而将包含脚本的父容器留在后面。

2 个答案:

答案 0 :(得分:1)

我认为你很亲密。您可以尝试以下操作:

docker exec container1 sed -i -e 's/false/true/g' /opt/data_dir/gs.xml

说明:

  • -it用于交互式会话,因此您在这里不需要它。
  • docker可以执行任何命令(例如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