我正在尝试创建一个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巫师!
任何帮助表示赞赏!
答案 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 update
和apt-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/