天天看點

暴力修改Docker容器的啟動指令

事情是這樣的,我先運作了一個docker容器,然後再這個docker容器中部署了一個web應用:

暴力修改Docker容器的啟動指令

可以看到容器rust_cms的運作指令是<code>/bin/bash</code> ,現在想讓這個容器自動啟動并且啟動後運作web服務.自動啟動可以使用<code>docker update</code>更改啟動政策,如:

docker update --restart always rust_cms

但docker update不支援修改<code>COMMAND</code>,每次docker重新啟動還是要手動去啟動web服務,怎麼辦呢?

想到的第一個方法是使用<code>docker commit</code> 把目前容器儲存為鏡像再使用新的鏡像啟動一個新的容器,在執行<code>docker run</code>啟動新容器時就可以指定新的運作指令了。

感覺這個方法還得重新設定端口什麼的比較麻煩,能不能直接修改docker容器的配置檔案呢?這樣顯然比較暴力風險比較大。

使用docker inspect找到容器rust_cms配置檔案所在目錄

暴力修改Docker容器的啟動指令
暴力修改Docker容器的啟動指令

目錄下的<code>config.v2.json</code>就是容器的配置檔案了,如果你使用的docker版本比較低也可能是config.json。

找到檔案就動手修改吧,修改前請停止docker服務并先備份config.v2.json檔案以防改失敗了好復原:

把檔案中的指令<code>/bin/bash</code>替換為新的指令:

暴力修改Docker容器的啟動指令

再重新開機下docker服務:

systemctl start docker

檢視容器是否啟動成功:

從狀态資訊:

Restarting (101) 4 seconds ago

可以看出容器啟動失敗了,這是為什麼呢?

是啟動web伺服器時忘記設定目前目錄了,索性在config.v2.json檔案裡把目前工作目錄也改了:

暴力修改Docker容器的啟動指令

再次啟動docker服務,就正常了:

暴力修改Docker容器的啟動指令

如果執行指令比較麻煩,可能方式一還快些.

補充:

作業系統 centos 7

關注部落客即可閱讀全文