web-dev-qa-db-ja.com

Docker-compose:データベースは初期化されていません

Docker-composeとmysqlに問題があります:

docker-compose.yml

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD:

   app:
    depends_on:
      - db
    image: eboraas/Apache-php
    links:
      - db
    ports:
      - "80:80"
    volumes:
      - ./sito/:/var/www/html/

このコンテナを作成するとエラーが発生しました:

Recreating phpapp_phpapache_1
Attaching to phpapp_db_1, phpapp_phpapache_1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
phpapache_1 | AH00558: Apache2: Could not reliably determine the server's fully qualified domain name, using 172.30.0.3. Set the 'ServerName' directive globally to suppress this message
phpapp_db_1 exited with code 1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified

ただし、データベースにはパスワードがありません。どうすれば解決できますか?

12
Stefano

ドキュメント の代わりに、MYSQL_ROOT_PASSWORD:を使用する必要があります-および=また使用する必要があります「パスワード」結果は次のようになります。

- MYSQL_ROOT_PASSWORD=some_password

あなたの例では:

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=some_password
11
mayo

MYSQL_ROOT_PASSWORDを何も設定していないようです。ドキュメントごとに、それが必要です。

https://hub.docker.com/_/mysql/

MYSQL_ROOT_PASSWORD

この変数は必須であり、MySQLルートスーパーユーザーアカウントに設定されるパスワードを指定します。

4
DevOps Dan

MYSQL_ROOT_PASSWORDの値を指定しないと、問題が発生します(他のケースについては以下で説明します)。

以下の構文のいずれかを使用できます。

# syntax 1
environment:
  MYSQL_ROOT_PASSWORD: strongrootpassword
# syntax 2
environment:
 - MYSQL_ROOT_PASSWORD=strongrootpassword

空白/空のパスワードを使用する場合は、次を使用します。

MYSQL_ALLOW_EMPTY_PASSWORD=1

ランダムパスワードを設定する場合は、次を使用します。

MYSQL_RANDOM_ROOT_PASSWORD=1

その後、次を使用して生成されたパスワードを取得できます

docker logs container_name_or_id 

最後に、MySQLイメージのエントリポイントに従って、MYSQL_ROOT_PASSWORDMYSQL_ALLOW_EMPTY_PASSWORD、およびMYSQL_RANDOM_ROOT_PASSWORD[〜#〜] one [〜#〜] one [〜#〜]を指定する必要があります。

  • -zは、変数が空でないことを確認します
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
    echo >&2 'error: database is uninitialized and password option is not specified '
    echo >&2 '  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
    exit 1
fi
3
Mostafa Hussein