Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash脚本在进入docker容器时退出_Linux_Bash_Performance_Docker_Containers - Fatal编程技术网

Linux 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 "---------------------

我正在尝试创建一个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应用程序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的美丽世界,我保证,这太神奇了:)