1. 程式人生 > 其它 >Docker容器啟動時,容器內應用服務自啟動設定

Docker容器啟動時,容器內應用服務自啟動設定

Docker 執行映象時發現容器是執行起來了,但是容器的應用服務還是在關閉狀態,沒有開啟。每次容器執行時還要進入正在執行的容器內啟動應用服務。進入正在執行的容器中執行以下命令:

$ docker exec -it -d XXX /bin/bash
其中:
-d 後臺執行
XXX 容器的名字
/bin/bash 以互動的方式執行容器

測試環境安裝的是lnmp環境,採用LNMP一鍵安裝包LNMP映象
安裝過程如下:
第一步:拉取centos,獲取的是官方最新centos

$ docker pull centos
第二步: 以互動的方式進入容器內

docker run -it -d centos:latest /bin/bash
第三步: 在centos容器中執行LNMP一鍵安裝包
第四步:安裝完成後退出容器,將剛剛的容器製作成映象

$ docker commit -m="AA-BB" -a="roon" 7485859a46ad lnmp:v1
其中:
-m:提交的描述資訊
-a:指定映象作者
7485859a46ad:容器ID
lnmp:v1:指定要建立的目標映象名
到此lnmp 映象製作完畢

$ docker images
會發現剛剛製作好的映象

執行LNMP映象

$ docker run -it -d -p 9508:80 lnmp:v1
-p 9508:80 將伺服器9508埠對映到lnmp:v1容器的80埠
在瀏覽器輸入
http://ip:9508
其中也可以輸入域名
發現連線不上
查詢問題:
容器已經在執行中了,埠也映射了,怎麼就不能訪問呢,
進入容器中看看

$docker exec -it -d XXX /bin/bash
執行

$ netstat -nutlp
此命令是檢視所有程序埠情況

what 應用伺服器沒有啟動,所有埠都沒有在執行,在容器中執行:

$ lnmp start
再次檢視程序埠情況,發現所有埠執行起來了

在瀏覽器中再次訪問,發現訪問成功了

但是每次容器啟動的時候都要進入容器內操作應用伺服器的開啟,有沒有什麼好的方法容器啟動的時候,容器內的應用伺服器也啟動。網上查資料,還真的有這方面的資料。但是發現好多都是類似的內容,不知道真假。自己嘗試應用。
第一步:進入容器
在容器的根目錄下建立start.sh指令碼
網上參考的命令

#!/bin/sh
/bin/serviceA start #啟動服務
/bin/bash #保留一個終端,防止容器自動退出
這個命令不符合自己的實際需要,於是進行改寫

#!/bin/sh
lnmp start #啟動lnmp伺服器的命令
/bin/bash

儲存退出,重新建立lnmp映象:lnmp:v2

如下命令啟動映象

$ docker run -it -d -p 9508:80 lnmp:v2 /start.sh
發現還是出錯,錯誤如下:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/start.sh\": permission denied": unknown.
原來是沒有給start.sh許可權,再次進入容器修改start.sh許可權:

$ chmod 777 start.sh
將最終版本的容器重新制作成映象:lnmp:v3

$ docker run -it -d -p 9508:80 lnmp:v3 /start.sh
這次啟動成功了,在進入容器檢視埠執行情況發現容器內的應用伺服器已經執行起來了。
在瀏覽器訪問9508埠也執行成功了,到此容器內應用服務自啟動設定完畢
測試過程中遇到的其他問題:
1.埠9508有時因為執行其他內容而佔用了,這時候可以殺死程序或者更換其他可用的埠,殺死埠的命令

$ kill 9508
2.start.sh指令碼的命令
本例項採用的是lnmp伺服器,啟動的命令是:lnmp start,如啟動其他的程序,根據情況新增命令
如:啟動php,mysql:
service php-pfm start
service mysqld start
可以在start.sh新增

#!/bin/sh
service php-pfm start
service mysqld start
/bin/bash

--------------------------------------------------------------------------------------------------
原文連結:https://blog.csdn.net/wang_magento/article/details/100763622