LoginSignup
11
12

More than 3 years have passed since last update.

Docker composeでマウントするボリュームを変更したいならコンテナ作り直そう

Last updated at Posted at 2020-03-23

TL;DR

マウントするボリュームを変更したいなら以下のいずれかを実行して、コンテナを明示的に削除しないといけない

  • docker-compose up --renew-anon-volumes
  • docker-compose down && docker-compose up
  • docker container rm ${DB_CONTAINER_ID} && docker-compose up

何をしたかったのか

開発に使っているdbコンテナで実験がしたかったが、既存のデータを壊したくなかったので、docker-compose.ymlを書き換えることで新規のデータボリュームをアタッチしたかった

Before

version: ‘3.5’
services:
  db:
    image: mysql:5.6.38
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
  web:
    image: ruby
    volumes:
      - workspace:/workspace
    depends_on:
     - db
    tty: true
volumes:
  mysql-data:
  workspace:

After

version: ‘3.5’
services:
  db:
    image: mysql:5.6.38
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data_new:/var/lib/mysql # <- ここ
  web:
    image: ruby
    volumes:
      - workspace:/workspace
    depends_on:
     - db
    tty: true
volumes:
  mysql-data_new: # <- ここ
  workspace:

何が起きたのか

以下の警告が出て

WARNING: Service "db" is using volume "/var/lib/mysql" from the previous container. Host mapping "your-project_mysql-data_new" has no effect. Remove the existing containers (with `docker-com...

既存の"your-project_mysql-data"が使われ続けた。というか、以前のコンテナが使われ続けて、以前のデータボリュームがマウントされてしまった。

どうすればいいのか

docker-compose down

してコンテナを削除するか、DBコンテナだけ消したいなら

docker container rm ${DB_CONTAINER_ID}

すればいい。DBコンテナなら必要なのはデータボリュームだけだろうからコンテナをさくりと作り直すのがいい。

もしくは、 -V or --renew-anon-volumes オプションをつけて、以前のコンテナからのボリュームの再利用を止めればいい。

https://github.com/docker/compose/issues/2481#issuecomment-279082091
https://github.com/docker/compose/issues/4476

このへんをみてようやく気づけた。

なぜそうなったのか

コンテナにアタッチしたボリュームは変更できない。なのでコンテナを作り直さないといけないんだけど、webの方のコンテナは docker-container up を実行しただけで作成し直してくれた。コンテナを作り直してくれる条件が不明。

11
12
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
11
12