docker-compose project name

docker-compose透過docker-compose.yml檔案描述的方式,操作docker container,特別是multi containers的情境,讓使用和管理上變得很容易,不過需要注意的是 docker compose是透過project name來識別要操作的container,例如啟動、停止等。

一般來說,啟動就只要下docker-compose up就可以,不同的container是isolated,但是在某些情境,對於不同的docker-compose.yml下 docker-compose up有可能會互相干擾,例如以下,起始一個container name為testm2 docker instance

version: "3.9" # optional since v1.27.0
services:
  app2:
    container_name: testm2
    image: centos:7
    command: sleep 1d

在另一個資料夾下的啟動testm3

version: "3.9" # optional since v1.27.0
services:
  app2:
    container_name: testm3
    image: centos:7
    command: sleep 1d

上面出現了recreating testm2,查看container list,testm2消失,取代的是testm3

而原來testm2也顯示被踢掉了

這表示testm2被停掉,主要的原因是project name相同

直覺上會覺得container name不同應該就會不會衝突,事實上docker compose是透過project name來管理,參考: https://docs.docker.com/compose/

The default project name is the basename of the project directory. You can set a custom project name by using the -p command line option or the COMPOSE_PROJECT_NAME environment variable.

因為testm2 testm3都是放在config資料夾(雖然絕對路徑不同),所以project name都是資料夾名稱config,也可以透過 docker inspect test3 看到 docker compose在docker container object記下的labels metadata如下

改成command line加上project name


再查看兩個container都被建立起來

docker-compose是相當方便的工具,但是在使用上project name這個小細節需要特別小心,因為他可能造成使用者不預期停掉docker container,這對於在線環境是特別危險的。

This entry was posted in System Administration. Bookmark the permalink.

Leave a Reply