質問・実現したいこと
docker-compose.yml
のenvironment
要素が, コンテナに正しく反映されない原因とその対策方法を教えていただきたいです。
問題は, 以下のdocker-compose.yml
で起きていると考えています。
以下のdocker-compose.yml
では, environment
の要素として,
- MYSQL_ROOT_PASSWORD
- MYSQL_USER
- MYSQL_PASSWORD
を定義しています。
しかし, この情報がdocker-compose up -d
で立てたコンテナ内に反映されていませんでした。
yml:docker
1# docker-compose.yml 2version: '3' 3 4services: 5 # MySQL 6 db: 7 image: mysql:8.0 8 container_name: mysql_host 9 environment: 10 MYSQL_ROOT_PASSWORD: root # rootのpassをrootに設定 11 MYSQL_DATABASE: sampleDB 12 MYSQL_USER: docker # dockerというユーザを定義 13 MYSQL_PASSWORD: docker # そのユーザのpassをdockerに設定 14 TZ: 'Asia/Tokyo' 15 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 16 volumes: 17 - ./docker/db/data:/var/lib/mysql 18 - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf 19 - ./docker/db/sql:/docker-entrypoint-initdb.d 20 ports: 21 - 3306:3306
試したこと・確認したこと
上で提示したファイルを元にdocker-compose up -d
でコンテナを生成してdocker exec
でコンテナ内に入り, 直接作業mysql
コマンドを使用しようとしました。
しかし, 以下のように
mysql -uroot -p
とroot
でインタラクティブシェルを開こうとしても,
mysql -udocker -p
とdocker
でインタラクティブシェルを開こうとしてもAccess deniedされてしまいました......
bash
1// shell 2$ docker ps 3CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4bc38faeb99a6 mysql:8.0 "docker-entrypoint.s…" 8 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql_host 5$ docker exec -it bc38 /bin/bash 6root@bc38faeb99a6:/# mysql -uroot -p 7Enter password: 8ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 9root@bc38faeb99a6:/# mysql -udocker -p 10Enter password: 11ERROR 1045 (28000): Access denied for user 'docker'@'localhost' (using password: YES)
この結果から, そもそもdocker-compose.yml
のenvironment
で設定したはずの要素が正しく反映されていないものと考え, このような質問を投稿しています。
また, 他に情報が欲しい場合は, コメントしていただければ追記いたします。
なにとぞ, よろしくお願いします。
追記
コンテナ内で確認した環境変数の内容
環境変数は正しく反映されているらしいです...
では何故mysql自体に反映されていないのでしょうか...?
bash
1$ docker ps 2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 302a3b0b8f72d mysql:8.0 "docker-entrypoint.s…" 2 seconds ago Up Less than a second 0.0.0.0:3306->3306/tcp, 33060/tcp mysql_host 4$ docker exec -it 02a /bin/bash 5root@02a3b0b8f72d:/# env 6MYSQL_PASSWORD=docker 7TZ=Asia/Tokyo 8HOSTNAME=02a3b0b8f72d 9MYSQL_DATABASE=sampleDB 10MYSQL_ROOT_PASSWORD=root 11PWD=/ 12HOME=/root 13MYSQL_MAJOR=8.0 14GOSU_VERSION=1.7 15MYSQL_USER=docker 16MYSQL_VERSION=8.0.16-2debian9 17TERM=xterm 18SHLVL=1 19PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 20_=/usr/bin/env
docker-compose logs db で見れるログ
以下の通りです。
私としては, まず4行目の[Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
が問題だと考えています。
なぜなら, docker-compose.yml
で設定したはずだからです。
何故なのか...
text
1Attaching to mysql_host 2[36mmysql_host |[0m Initializing database 3[36mmysql_host |[0m 2019-06-09T05:25:15.104523Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 4[36mmysql_host |[0m 2019-06-09T05:25:15.106187Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.16) initializing of server in progress as process 28 5[36mmysql_host |[0m 2019-06-09T05:25:24.300438Z 5 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. 6[36mmysql_host |[0m 2019-06-09T05:25:30.689081Z 0 [System] [MY-013170] [Server] /usr/sbin/mysqld (mysqld 8.0.16) initializing of server has completed 7[36mmysql_host |[0m Database initialized 8[36mmysql_host |[0m MySQL init process in progress... 9[36mmysql_host |[0m MySQL init process in progress... 10[36mmysql_host |[0m MySQL init process in progress... 11[36mmysql_host |[0m 2019-06-09T05:25:33.999456Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 12[36mmysql_host |[0m 2019-06-09T05:25:34.006555Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.16) starting as process 79 13[36mmysql_host |[0m 2019-06-09T05:25:36.482160Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. 14[36mmysql_host |[0m 2019-06-09T05:25:36.509381Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. 15[36mmysql_host |[0m 2019-06-09T05:25:36.581626Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.16' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL. 16[36mmysql_host |[0m 2019-06-09T05:25:36.843695Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' 17[36mmysql_host |[0m MySQL init process in progress... 18[36mmysql_host |[0m MySQL init process in progress... 19[36mmysql_host |[0m MySQL init process in progress... 20[36mmysql_host |[0m MySQL init process in progress... 21[36mmysql_host |[0m MySQL init process in progress... 22[36mmysql_host |[0m MySQL init process in progress... 23[36mmysql_host |[0m MySQL init process in progress... 24[36mmysql_host |[0m MySQL init process in progress... 25[36mmysql_host |[0m MySQL init process in progress... 26[36mmysql_host |[0m MySQL init process in progress... 27[36mmysql_host |[0m MySQL init process in progress... 28[36mmysql_host |[0m MySQL init process in progress... 29[36mmysql_host |[0m MySQL init process in progress... 30[36mmysql_host |[0m MySQL init process in progress... 31[36mmysql_host |[0m MySQL init process in progress... 32[36mmysql_host |[0m MySQL init process in progress... 33[36mmysql_host |[0m MySQL init process in progress... 34[36mmysql_host |[0m MySQL init process in progress... 35[36mmysql_host |[0m MySQL init process in progress... 36[36mmysql_host |[0m MySQL init process in progress... 37[36mmysql_host |[0m MySQL init process in progress... 38[36mmysql_host |[0m MySQL init process in progress... 39[36mmysql_host |[0m MySQL init process in progress... 40[36mmysql_host |[0m MySQL init process in progress... 41[36mmysql_host |[0m MySQL init process in progress... 42[36mmysql_host |[0m MySQL init process in progress... 43[36mmysql_host |[0m MySQL init process in progress... 44[36mmysql_host |[0m MySQL init process in progress... 45[36mmysql_host |[0m MySQL init process failed.
sqlファイルやinit用のファイル群
作成に際して, 以下の記事を参考にしました。
フォルダ構成は以下の通りです。
bash
1. 2├── docker 3│ └── db 4│ ├── data 5│ ├── my.cnf 6│ └── sql 7│ ├── create-user-table.sql 8│ └── init-database.sh 9├── docker-compose.yml 10└── init-mysql.sh
./docker/db/my.cnf
// ./docker/db/my.cnf [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4 port = 3306 user = docker password = docker
./docker/db/sql/create-user-table.sql
sql
1-- User Table 2drop table if exists `User`; 3 4create table if not exists `User` 5( 6 `id` INT(8) AUTO_INCREMENT, 7 `name` VARCHAR(64) NOT NULL, 8 `hashed_pass` VARCHAR(64) NOT NULL, 9 primary key(`id`) 10) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
./docker/db/sql/init-database.sh
sh
1#!/usr/bin/env bash 2#sleep 90s 3 4#run the setup script to create the DB and the schema in the DB 5mysql --defaults-extra-file=/etc/mysql/my.cnf sampleDB < "/docker-entrypoint-initdb.d/create-user-table.sql"
./init-mysql.sh
sh
1#!/bin/sh 2docker-compose exec db bash -c "chmod 0775 docker-entrypoint-initdb.d/init-database.sh" 3docker-compose exec db basg -c "./docker-entrypoint-initdb.d/init-database.sh"
実行環境
- macOS Mojave version 10.14.1
- docker-compose version 1.23.2, build 1110ad01
- Docker version 18.09.2, build 6247962

回答3件
あなたの回答
tips
プレビュー