🕌

Docker + MySQLの環境変数の変更が適用されないときの対処法

2024/06/05に公開

結論

docker compose down
docker volume ls
docker volume rm {volume name}
docker-compose up --build -d

状況

.env
ROOT_PASS=root #pass→rootに変更
DB_NAME=test_db
DB_USER=user
DB_PASS=pass
DB_PORT=3306
TZ=Asia/Tokyo
compose.yml
version: '3'

services:
  db:
    image: mysql:8
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${ROOT_PASS}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
      TZ: ${TZ}
    ports:
        - ${DB_PORT}:3306
    volumes:
        - db-store:/var/lib/mysql
        - ./my.cnf:/etc/mysql/conf.d/my.cnf
volumes:
  db-store:
  • .envに環境変数を登録
  • compose.ymlで読み込む
  • envの値を変更しても値が適用されない
mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 
  • 環境変数変更前のpassなら入れるが、rootだと入れない=新しい環境変数が適用されていない
  • 結論として、volumeを削除して再ビルドすると治った。
    • volumeに環境変数の値が保存されていたままだった?

Discussion