[英]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沒有關系。
受到以下答案的啟發,我們發現了以下解決方法:
我們將環境變量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_myapp
和bob_myapp
),並且不會發生沖突。
如果人們厭倦了使用-p
選項,則可以創建一個.env
如下所示:
COMPOSE_PROJECT_NAME=alice_myapp
這與在命令行上指定-p alice_myapp
具有相同的效果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.