2017-08-10 67 views
0

我試圖創建一個bash腳本,用於在新服務器上設置docker和應用程序。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 -it application bash 

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

- docker exec -it application bash

它按預期進入容器,但bash腳本然後停止,因爲這個意思後面的命令不運行

無論如何我可以解決這個問題嗎?我不認爲有,但如果有任何bash巫師在那裏!

任何幫助表示讚賞!

+0

請澄清:你想運行'apt-get的更新和易於得到安裝的git和CD的/ var/WWW /在容器內的HTML? – Fotis

+0

此外,請提供'docker logs應用程序'的輸出,以便我們可以更好地瞭解問題:) – Fotis

+0

是的fotis thats correct - 在docker exec命令bash腳本停止/退出,因爲沒有運行其餘的在這步 –

回答

0

這就是-it應該做的。它意味着一個交互式的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" 
1

一個幾句話在這裏:

這是更好地使用docker exec -it application /bin/bash(提供的路徑,bash可執行文件),因爲在容器通常在$ PATH沒有設置,讓你」重新可能會得到一個錯誤。

此外,命令docker exec -it application /bin/bash將進入interactive模式,它爲您分配命令行,因此腳本將停止執行,並等待您輸入一些命令stdin

現在,如果您想在泊塢窗容器中運行一系列命令,則無法通過在腳本中提供它們來執行此操作。

一兩件事你可以做的,就是創建一個你可以安裝一個捲到你docker run(如:docker run -v /Users/Calvin/myscript.sh:/myscript.sh,你可以做的另一件事是通過-c提供的命令,所以docker exec application /bin/sh -C 'apt-get update ....'腳本文件(如:myscript.sh)(我不使用-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/

+0

感謝您的帖子!你有一些好點 - 我正在努力找到一個碼頭文件,所以是有道理的!我明白了-it命令現在只是缺乏理解,所有這些我可以得到我想要的現在 - 乾杯! :) –

+0

歡迎來到美麗的Docker @CalvinTaylor世界我保證,這真是太棒了:) – Fotis