個人学習でアプリを作成しており、そのアプリにDockerを導入しようと試みているのですが、dbにうまく接続ができず行き詰まっております。
環境
Docker version 20.10.2
Mac OS BigSur 11.2.3
Rails 6.1.3
Ruby 2.6.5
エラー内容
db_1 | 2021-03-17 14:31:47.077 UTC [34] FATAL: password authentication failed for user "myapp" db_1 | 2021-03-17 14:31:47.077 UTC [34] DETAIL: Role "myapp" does not exist. db_1 | Connection matched pg_hba.conf line 99: "host all all all md5"
以上のエラーが出ており、認証周りのエラーと推測できるのですが、
docker-compose.yml
version: '3' services: db: image: postgres:13.1 restart: always ports: - '5432:5432' volumes: - postgres-data:/var/lib/postgresql/data environment: POSTGRES_USER: "myapp" POSTGRES_PASSWORD: "password" POSTGRES_INITDB_ARGS: "--encoding=UTF-8" POSTGRES_DB: new_book web: build: context: . dockerfile: Dockerfile command: bundle exec rails s -p 3000 -b '0.0.0.0' tty: true stdin_open: true depends_on: - db ports: - "3000:3000" volumes: - .:/myproject volumes: postgres-data:
database.yml
default: &default adapter: postgresql pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 encoding: utf8 username: "myapp" password: "password" development: <<: *default database: MyApp_development host: db test: <<: *default database: MyApp_test host: db
以上のように設定してありログインの情報は正しいように思われます。
Dockerを初めて使用し、どの観点からエラーを解決していけばよいかよくわからないため、知見のある方いらっしゃいましたらお力を貸していただけますと幸いです。
よろしくお願いいたします。
追記
dbコンテナ接続してユーザーが存在するか確認を行なったところ、myappユーザが存在しなかっただけでなくデフォルトのpostgresユーザーも存在しなかったためpsqlサーバーにログインができない状況となってました。
docker-compose.ymlのenvironmentを一旦削除してコンテナを立ち上げるなど行なったのですがどの方法でもユーザーが存在しないというエラーが返ってきます。
% docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 432e388e548e postgres:13.1 "docker-entrypoint.s…" About a minute ago Up 10 seconds 0.0.0.0:5432->5432/tcp new_book_db_1 8b42969bd8d0 new_book_web "bundle exec rails s…" 23 hours ago Up 9 seconds 0.0.0.0:3000->3000/tcp new_book_web_1
docker-compose up -dで上記のコンテナを起動した状態で、
% docker exec -it 432e388e548e bash root@432e388e548e:/# psql -U myapp psql: error: FATAL: role "myapp" does not exist root@432e388e548e:/# psql -U postgres psql: error: FATAL: role "postgres" does not exist
dbコンテナに接続してpsql -U myappとpsql -U postgresを行いました。
コンテナが作成されpostgresサーバーが始動する時、どこを参照してroleとpasswordを作成してるか分かればと思ったのですが、よく理解できません。
もしこの情報から分かることございましたら教えていただきたく思います。重ねてお願いいたします。
あなたの回答
tips
プレビュー