我有一個服務,我通過碼頭工作人員通過牧場主進行創作。我遇到的問題是,我需要在部署容器後設置密碼。docker-compose,容器啓動後運行腳本?
牧場主祕密的工作方式是,我設置了我的祕密,牧場主將用包含我的祕密的文件在我的容器上裝入一個卷。我希望能夠執行腳本來獲取該祕密,並將其設置爲我的配置文件的密碼。
我不相信我有辦法通過Dockerfile獲得這個祕密,因爲我不想把祕密放在git中,所以我只能通過docker-compose來做這件事。
有誰知道這是可能的嗎?
我有一個服務,我通過碼頭工作人員通過牧場主進行創作。我遇到的問題是,我需要在部署容器後設置密碼。docker-compose,容器啓動後運行腳本?
牧場主祕密的工作方式是,我設置了我的祕密,牧場主將用包含我的祕密的文件在我的容器上裝入一個卷。我希望能夠執行腳本來獲取該祕密,並將其設置爲我的配置文件的密碼。
我不相信我有辦法通過Dockerfile獲得這個祕密,因爲我不想把祕密放在git中,所以我只能通過docker-compose來做這件事。
有誰知道這是可能的嗎?
docker-compose指定如何啓動容器,而不是如何修改現有的運行容器。
Rancher documentation提到,對於祕密的默認使用,您可以通過docker-compose.yml
中的祕密數組中的名稱引用祕密。
目標文件名將與密碼的名稱相同。
默認情況下,目標文件名將被創建爲用戶ID和組ID 0,文件模式0444.
在祕密部分中將外部設置爲真將確保它知道祕密已經創建。的基本docker-compose.yml
實施例:
version: '2'
services:
web:
image: sdelements/lets-chat
stdin_open: true
secrets:
- name-of-secret
labels:
io.rancher.container.pull_image: always
secrets:
name-of-secret:
external: true
如圖所示在 「How to Update a Single Running docker-compose Container」,更新的容器將涉及 「建造,殺死,和向上」 序列。
docker-compose up -d --no-deps --build <service_name>
關鍵是要覆蓋排字命令調用原始命令之前執行任何你需要的初始化動作。
init.sh
。你將它添加到你的圖像。Dockerfile:
FROM: sourceimage:tag
COPY init.sh /usr/local/bin/
泊塢窗,compose.yml:
services:
myservice:
image: something:tag
...
command: /usr/local/bin/init.sh && exec the_original_command_goes_here
它調用主命令之前使用exec
是很重要的。這將安裝該命令作爲第一個進程(PID1),這將使其接收信號,如停止或終止。
當然,這是設置祕密的一種相當普通的方式。只需將相關的shell腳本添加爲(或者)您的CMD或ENTRYPOINT即可。 –