1
0

More than 1 year has passed since last update.

【Docker Compose】別プロジェクトでも同じディレクトリ名だとコンテナが置き換わってしまう話

Posted at

参考

問題発生

開発用DBを用意するため、docker-compose.ymlで以下のような記述をしてdb/フォルダ内でdocker-compose up -dをした

  • myapp2/db/docker-compose.yml
version: '3'

services:
  mysql:
    image: mysql:5.7
    container_name: mysql_myapp2
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: myapp2
      MYSQL_USER: user
      MYSQL_PASSWORD: root
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
    restart: always
    ports:
      - 3307:3306

container_nameを独自のものにしていたため、独立して新しくコンテナが作られると思っていた。

しかし、同時に別プロジェクト同じフォルダ名(db)で以下のdocker-compose.ymlでDBを起動していた。

  • myapp1/db/docker-compose.yml
 version: '3'

   services:
     mysql:
       image: mysql:5.7
       container_name: mysql_myapp1
       environment:
         MYSQL_ROOT_PASSWORD: root
         MYSQL_DATABASE: myapp1
         MYSQL_USER: user
         MYSQL_PASSWORD: root
       volumes:
       - ./docker/db/data:/var/lib/mysql
       - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
       restart: always
       ports:
       - 3306:3306

container_nameが別なので別のコンテナが作成され、新規のコンテナ(mysql_myapp2)と共存するものかと思っていた。

しかし、docker-compose up -dをすると、以前(myapp1)のコンテナが消され、置き換わってしまった!!!!!!!!!!

これは困った。

原因

上記参考リンクにある通りだが、原因はプロジェクト名(フォルダ名)の衝突にあるらしいことがわかった。双方ともdb/配下にdocker-compose.ymlを配置していたため。

ここではプロジェクト名を指定していないのでdbがプロジェクト名とされ、その衝突によってcontainerのrecreateが発生しているようである。

対処

  1. プロジェクト名を-pオプションで指定する
  2. ディレクトリ名をdb/から変える

結論、私は2の方法でdb-> myapp-dbというディレクトリ名に変えることによって解決した。
プロジェクト名を指定するのもよいが起動時に毎回それやるのが面倒なので(envファイルに書けばいいというのはある)。

感想

container_name違うんだから別コンテナ扱いしてくれないのなんで??わからない。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0