kawabatas技術ブログ

試してみたことを書いていきます

docker-compose で postgres -> mysql に変えたら起動できなくなった

概要

docker-compose で postgres -> mysql に変えたら起動できなくなりました。

無事解決できたのでメモです。

起動時のエラー

$ docker-compose up -d

$ docker-compose ps
       Name                     Command               State    Ports
--------------------------------------------------------------------
xxxxx_db_1   docker-entrypoint.sh --cha ...   Exit 1

Exit 1 になっている

$ docker-compose logs
Attaching to xxxxx_db_1
db_1  | Initializing database
db_1  | 2019-02-15T01:24:47.314821Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
db_1  | 2019-02-15T01:24:47.316718Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
db_1  | 2019-02-15T01:24:47.317165Z 0 [ERROR] Aborting
db_1  |

[ERROR] --initialize specified but the data directory has files in it. Aborting.とは...

postgres と mysql で同じ docker volume だったのが原因

postgres の時

version: '3'
services:
  db:
    image: postgres:9.6
    ports:
      - "5432:5432"
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

mysql の時

version: '3'
services:
  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - db-data:/var/lib/mysql
volumes:
  db-data:

解決方法

da-data volume を削除すればおけ。

$ docker volume ls
DRIVER              VOLUME NAME
略
local               xxxxx_db-data
略

$ docker volume rm xxxxx_db-data

Error response from daemon: remove xxxxx_db-data: volume is in use - [ハッシュ名]とエラーが出て、volume を削除できない場合は

$ docker system prune
$ docker volume rm xxxxx_db-data

確認

$ docker-compose up -d
Creating network "xxxxx_default" with the default driver
Creating xxxxx_db_1 ... done

$ docker-compose ps
       Name                     Command               State                 Ports
-----------------------------------------------------------------------------------------------
xxxxx_db_1   docker-entrypoint.sh --cha ...   Up      0.0.0.0:3306->3306/tcp, 33060/tcp

いけた