2017-12-03 303 views
1

我有一個服務,我通過碼頭工作人員通過牧場主進行創作。我遇到的問題是,我需要在部署容器後設置密碼。docker-compose,容器啓動後運行腳本?

牧場主祕密的工作方式是,我設置了我的祕密,牧場主將用包含我的祕密的文件在我的容器上裝入一個卷。我希望能夠執行腳本來獲取該祕密,並將其設置爲我的配置文件的密碼。

我不相信我有辦法通過Dockerfile獲得這個祕密,因爲我不想把祕密放在git中,所以我只能通過docker-compose來做這件事。

有誰知道這是可能的嗎?

+0

當然,這是設置祕密的一種相當普通的方式。只需將相關的shell腳本添加爲(或者)您的CMD或ENTRYPOINT即可。 –

回答

0

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> 
0

關鍵是要覆蓋排字命令調用原始命令之前執行任何你需要的初始化動作。

  1. 添加您的圖像的腳本,將執行所要像設置的密碼初始化工作,改變內部配置文件,等等。讓我們把它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),這將使其接收信號,如停止或終止。