簡體   English   中英

docker-compose:使用env vars從同一docker-compose文件啟動服務以更改容器名稱

[英]docker-compose: start service from same docker-compose file using env vars to alter container name

我們在一組開發人員中使用docker。 我們有所有開發人員都在從事的項目。 由於我們不希望每個開發人員都有一個docker-compose.yml ,因此我們使用環境變量將用戶名傳遞給docker-compose。 在docker-compose內部,我們有一些類似的services: myservice: image: myimage container_name: ${user}_myservice

過去對我們來說效果很好,但最近已停止工作。 假設有兩個用戶。 第一個用戶運行docker-compose up myservice啟動$ {user1} _myservice。 當第二個用戶發出相同的命令時,第二個用戶將終止在$ {user1} _myservice下運行的容器並啟動$ {user2} _myservice。

似乎以某種方式現在可以直接鏈接docker服務,而不僅僅是像以前一樣通過container_name變量。

我們最近將Docker version 17.09.0-ce, build afdb6d4升級到Docker version 17.09.0-ce, build afdb6d4 我將更改歸因於“新”泊塢窗版本。 我嘗試將docker-compose降級到以前的版本,看來這與docker-compose沒有關系。

UPDATE

受到以下答案的啟發,我們發現了以下解決方法:

我們將環境變量COMPOSE_PROJECT_NAME設置為主機上用戶登錄時的用戶名。 然后,我們將docker-compose.yml文件中的服務名稱擴展為<proj>_<service> ,從而避免了跨項目的相同服務名稱之間的任何沖突。

而不是擺弄變量docker-compose.yml ,它可能更容易只是為了讓使用的--project-name-p )選項docker-compose

通常, docker-compose從包含您docker-compose.yaml文件的目錄名稱中獲取項目名稱。 因此,如果兩個人試圖從名為myapp的目錄中啟動應用程序,則由於兩個實例都將嘗試使用相同的名稱,最終將導致沖突。

但是,如果改為運行它們:

docker-compose --project-name ${USER}_myapp ...

然后,每個用戶的alice_myapp docker-compose將使用不同的項目名稱(例如alice_myappbob_myapp ),並且不會發生沖突。

如果人們厭倦了使用-p選項,則可以創建一個.env如下所示:

COMPOSE_PROJECT_NAME=alice_myapp

這與在命令行上指定-p alice_myapp具有相同的效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM