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 theCOMPOSE_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,這對於在線環境是特別危險的。