Bash脚本在进入docker容器时退出

时间:2017-08-10 15:18:38

标签: linux bash performance docker containers

我正在尝试创建一个bash脚本,用于在新服务器上设置docker和应用程序。

非常新鲜的打击自己,但我认为我得到了正确的

下面是我的问题所在的片段 -

docker run -d --name application -p 80:80 -d  tutum/apache-php
docker run -d -p 3306:3306 --name=database --
env="MYSQL_ROOT_PASSWORD=password1" mysql:latest
echo "--------------------------------------------------------------------"
echo "Docker is all done - run docker ps -a to see all created 
containers!"
echo "--------------------------------------------------------------------"
echo "Moving onto installing application into app container!"
echo "--------------------------------------------------------------------"
docker exec -it application bash

apt-get update & apt-get install git & cd /var/www/html

就行 - docker exec -it application bash

它按预期进入容器但是bash脚本因此停止,这意味着在运行之后的以下命令

无论如何我可以解决这个问题吗?我不认为有,但万一有任何bash巫师!

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

这就是extern "C"应该做的事情。它意味着一个交互式bash,它只会在你完成后退出。更改您的代码如下

-it

答案 1 :(得分:1)

这里有几点评论:

最好使用docker exec -it application /bin/bash(提供bash可执行文件的路径),因为在容器中通常没有设置$ PATH,所以你可能会收到错误。

此外,命令docker exec -it application /bin/bash将进入interactive模式,为您分配命令行,因此脚本将停止在那里执行并等待您在stdin输入一些命令

现在,如果你想在docker容器中运行一系列命令,你就不能通过在脚本中提供它们来做到这一点。

您可以做的一件事是创建一个脚本文件(例如。myscript.sh),您可以将其作为卷安装到docker run(例如docker run -v /Users/Calvin/myscript.sh:/myscript.sh。另外您可以do是通过-c提供命令,所以docker exec application /bin/sh -C 'apt-get update ....'(注意我没有使用-it标志)。

最后,您尝试实现的最佳做法是提供Dockerfile,以便在构建容器时运行apt-get updateapt-get install -y git,而不是每个你提起它的时间。

示例Dockerfile:

FROM tutum/apache-php
RUN apt-get update
RUN apt-get install -y git

然后使用docker build -t .

有关Dockerfile的更多信息,请访问:https://docs.docker.com/engine/reference/builder/