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

2021-09-27 02:15:13 字數 2806 閱讀 4717

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

$ docker exec -it -d *** /bin/bash
其中:

-d 後台執行

*** 容器的名字

/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埠

在瀏覽器輸入

其中也可以輸入網域名稱

發現連線不上

查詢問題:

容器已經在執行中了,埠也映**,怎麼就不能訪問呢,

進入容器中看看

$docker exec -it -d *** /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

在Docker建立的Mysql容器啟動時執行sql

我們有時需要在mysql容器啟動時執行sql建表,那麼我們就可以在構建映象時,指定容器要執行的sql.步驟 1.準備建資料庫表的檔案init db.sql 檔名需要對應和dockerfile定義要執行的sql檔名一樣 create database if not exists test use te...

docker 容器啟動時設定環境變數source

映象啟動時,自動執行的是 bashrc檔案,所以,環境變數需要配置在該檔案內,這樣映象啟動時,可自動執行該檔案,使環境變數生效。vi bashrc bashrc user specific aliases and functions alias rm rm i alias cp cp i alias...

容器啟動時間的優化

spring的ioc容器預設在啟動時載入整個物件例項圖,只要配置根元素beans的default lazy init true 就能讓spring不載入整個物件例項圖。特別要注意的是 spring封裝quartz類class org.springframework.scheduling.quartz...