Linux Bash脚本在进入docker容器时退出
我正在尝试创建一个bash脚本,用于在新服务器上设置docker和应用程序 很新鲜,但我想我得到了公正的答案 这是我的问题所在-Linux Bash脚本在进入docker容器时退出,linux,bash,performance,docker,containers,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 "---------------------
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应用程序bash
它按预期进入容器,但bash脚本随后停止,因为这意味着后面的命令不会运行
有什么我可以解决的吗?我不认为有,但万一有任何bash巫师在那里
感谢您的帮助 这就是它应该做的事。它意味着一个交互式的bash,只有当您完成它时,它才会退出。更改您的代码如下
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 application bash -c "apt-get update & apt-get install git -y"
docker exec -it application bash -c "cd /var/www/html; exec bash"
这里有几句话:
最好使用docker exec-It应用程序/bin/bash
(提供bash可执行文件的路径),因为在容器中通常未设置$path,因此可能会出现错误
另外,命令docker exec-it application/bin/bash
将进入交互
模式,该模式为您分配一个命令行,因此脚本将在那里停止执行,并等待您在stdin
输入一些命令
现在,如果要在docker容器中运行一系列命令,则不能在脚本中提供这些命令
您可以做的一件事是创建一个脚本文件(例如,myscript.sh
),您可以将其作为卷装载到docker run
(例如,docker-run-v/Users/Calvin/myscript.sh:/myscript.sh
。您可以做的另一件事是通过-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.
有关docker文件的更多信息,请在此:请澄清:您是否试图在容器内运行
apt get update&apt get install git&cd/var/www/html
?此外,请提供docker logs应用程序的输出,以便我们更好地了解问题:)是的,这是正确的-在docker exec命令上,bash脚本停止/退出,因为没有运行我在此步骤后必须运行的其余命令。apt get update&..
与apt get update&&&….
非常不同。
单个在后台运行前面的cmd,然后尝试启动下一个cOmand立即。这没什么意义。切换到&&
查看这一行。祝你好运。谢谢你的回复,因为我以前不知道!不过这对我没有多大帮助:)谢谢你的帖子!你在这方面做得很好-我正朝着dockerfile工作,所以是的,这是有意义的!我明白,现在的it命令只是缺乏理解,所以通过所有这些,我现在可以得到我想要的-干杯!:)欢迎来到Docker@CalvinTaylor的美丽世界,我保证,这太神奇了:)