15

これは、docker-compose によって作成されたコンテナーにいるときに表示されるものです。

mysql> SELECT user FROM mysql.user;
+------+
| user |
+------+
| root |
+------+
1 row in set (0.00 sec)

root@541e4d686184:/# echo $MYSQL_USER
dbuser

そのため、適切に設定されていても、 usersdbuserテーブルには存在しません。$MYSQL_USER

私はこれdocker-compose.ymlを持っています:

version: '2'
services:
  db:
    image: mysql:latest
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: userpass
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306"
    volumes:
      - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
      - my-datavolume:/var/lib/mysql
volumes:
  my-datavolume:

自動的に作成されると思っdbuserていましたが、そうはなりませんでした。

sqlデータベースとテーブルがまだ存在しない場合は作成するためのファイルもありますが、現在、Tomcat はデータベースに接続できません。

この質問と同じ症状ですが、すでにユーザー名/パスワードに辞書を使用しています。

アップデート:

私は近づいています。コンテナ内で手動で行ったとき:

/docker-entrypoint-initdb.d/create_users.sh 

次に、ユーザーがMySQLテーブル内に作成され、アプリケーションをサーバーにデプロイできましたが、アクセスが拒否されtomcatたことに関するエラーは発生しませんでした。dbuser

では、なぜこのコマンドを自分で実行する必要があったのでしょうか。mysql docker docsInitializing a fresh instanceによると、docker-compose で実行する必要があります。

4

6 に答える 6

0

私のテストの後、

  1. init.sql を作成し、/docker-entrypoint-initdb.d へのリンクを作成します

  2. docker-compose down
    docker volume ls
    docker volume rm
    docker-compose up -d

それなら大丈夫

于 2021-07-23T09:52:42.417 に答える