質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

解決済

【PostgreSQL】docker-composeを使って「rails db:create」をした時に「fe_sendauth: no password supplied」というエラーが出る

ikore908
ikore908

総合スコア17

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1回答

0評価

0クリップ

514閲覧

投稿2022/01/22 22:50

はじめに

最初に結論を言うと、Docker環境でPostgresQLの最新版「14.1」を指定して
rails db:create
を実行すると、
fe_sendauth: no password supplied
というエラーが出ます。

流れ

流れとしては、参考サイト(こちら)を元に

  • docker
  • rails
  • postgresql

を使ってWEBアプリを作ろうとしており、まずrailsのウェルカムページ(Yay! You’re on Rails!)を表示させたいと思っています。

参考サイトと同じバージョン(ruby、postgresql、docker-compose)ではウェルカムページが表示できたのですが、
それぞれバージョンをアップさせて同じくウェルカムページを表示させようとした段階でつまづきました。

発生している問題・エラーメッセージ

具体的には、

  • ruby:2.6.5-alpine3.11 → 3.0.3-alpine3.15
  • docker-compose.yml version '3' → version '3.8'

のバージョンアップはうまくウェルカムページの表示ができたのですが、

  • postgres:12.1-alpine → 14.1-alpine

↑のようにpostgresのバージョンアップを行うと
docker-compose run --rm web rails db:create
を実行した段階で

terminal

Creating sample-app_db_1 ... done Creating sample-app_web_run ... done Running via Spring preloader in process 20 could not translate host name "db" to address: Name does not resolve Couldn't create 'app_development' database. Please check your configuration. rake aborted! ActiveRecord::ConnectionNotEstablished: could not translate host name "db" to address: Name does not resolve

というエラーが起きました。
そのためこちらの記事をもとに環境変数POSTGRES_PASSWORDを設定しました。

しかし、その後再び
docker-compose run --rm web rails db:create
を実行すると次は

terminal

Creating network "sample-app_default" with the default driver Creating sample-app_db_1 ... done Creating sample-app_web_run ... done Running via Spring preloader in process 20 connection to server at "db" (172.23.0.2), port 5432 failed: fe_sendauth: no password supplied Couldn't create 'app_development' database. Please check your configuration. rake aborted! ActiveRecord::ConnectionNotEstablished: connection to server at "db" (172.23.0.2), port 5432 failed: fe_sendauth: no password supplied - 一部省略 - Caused by: PG::ConnectionBad: connection to server at "db" (172.23.0.2), port 5432 failed: fe_sendauth: no password supplied /usr/local/bundle/gems/pg-1.2.3/lib/pg.rb:58:in `initialize' - 一部省略 - <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require' -e:1:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace) ERROR: 1

「パスワードが設定されていない」というようなエラーが出てabortするようになり、自力で解決できておらず質問いたしました。

各ファイル

Dockerfile

Dockerfile

FROM ruby:3.0.3-alpine3.15 ENV HOME="/app" ENV LANG=C.UTF-8 ENV TZ=Asia/Tokyo WORKDIR $HOME RUN apk update && \ apk upgrade && \ apk add --no-cache \ gcc \ g++ \ less \ libc-dev \ libxml2-dev \ linux-headers \ make \ nodejs \ postgresql \ postgresql-dev \ tzdata \ yarn && \ apk add --virtual build-packs --no-cache \ build-base \ curl-dev COPY Gemfile $HOME COPY Gemfile.lock $HOME RUN bundle install && \ apk del build-packs COPY . $HOME EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml

docker

version: '3.8' services: db: image: postgres:14.1-alpine environment: POSTGRES_PASSWORD: password volumes: - ./tmp/db:/var/lib/postgresql/data web: build: . volumes: - .:/app ports: - 3000:3000 depends_on: - db
database.yml

database.yml

# PostgreSQL. Versions 9.3 and up are supported. # # Install the pg driver: # gem install pg # On macOS with Homebrew: # gem install pg -- --with-pg-config=/usr/local/bin/pg_config # On macOS with MacPorts: # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config # On Windows: # gem install pg # Choose the win32 build. # Install PostgreSQL and put its /bin directory on your path. # # Configure Using Gemfile # gem 'pg' # default: &default adapter: postgresql encoding: unicode host: db username: postgres password: <%= ENV["POSTGRES_PASSWORD"] %> # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: app_development # The specified database role being used to connect to postgres. # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user running Rails. #username: app # The password associated with the postgres role (username). #password: # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have # domain sockets, so uncomment these lines. #host: localhost # The TCP port the server listens on. Defaults to 5432. # If your server runs on a different port number, change accordingly. #port: 5432 # Schema search path. The server defaults to $user,public #schema_search_path: myapp,sharedapp,public # Minimum log levels, in increasing order: # debug5, debug4, debug3, debug2, debug1, # log, notice, warning, error, fatal, and panic # Defaults to warning. #min_messages: notice # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: app_test # As with config/credentials.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. # # Instead, provide the password or a full connection URL as an environment # variable when you boot the app. For example: # # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" # # If the connection URL is provided in the special DATABASE_URL environment # variable, Rails will automatically merge its configuration values on top of # the values provided in this file. Alternatively, you can specify a connection # URL environment variable explicitly: # # production: # url: <%= ENV['MY_APP_DATABASE_URL'] %> # # Read https://guides.rubyonrails.org/configuring.html#configuring-a-database # for a full overview on how database connection configuration can be specified. # production: <<: *default database: app_production username: app password: <%= ENV['APP_DATABASE_PASSWORD'] %>

自分で調べたことや試したこと

環境変数の記述方法の変更

こちらの質問こちらのページに記載されているように、環境変数の記述方法を変えてみました。

docker-compose.yml

docker

environment: - POSTGRES_PASSWORD=password

docker

environment: POSTGRES_PASSWORD: password
database.yml

database.yml

default: &default adapter: postgresql encoding: unicode host: db username: postgres password: password

database.yml

default: &default adapter: postgresql encoding: unicode host: db username: postgres password: <%= ENV["POSTGRES_PASSWORD"] %>

しかし結果は変わりませんでした。

pg_hba.confの編集

こちらの質問を元にpg_hba.confを編集してみましたが、こちらも結果変わらずでした。

pg_hba.conf

pg_hba.conf

# "local" is for Unix domain socket connections only local all all trust

pg_hba.conf

# "local" is for Unix domain socket connections only local all all peer

なぜ環境変数を指定しているのにエラーになるのか、解決策やヒント等でも構いませんので情報お待ちしております。

また可能であればpostgres12.1ではエラーとならないのに、14.1でエラーが出るのがなぜか知れたら嬉しいです。

使っているツールのバージョンなど補足情報

Docker:20.10.11
docker-compose.yml:3.8
Ruby:3.0.3
Ruby on Rails:6.1.4.4
PostgresQL:14.1

不足の情報等ありましたらご指摘ただければとおもいます。
ご回答お待ちしております。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806

2022/01/22 23:50

psqlコマンドでの直ログインは確認しましたか?
ikore908

2022/01/23 12:23

コメントありがとうございます。はい、 `docker-compose run web sh` にてコンテナ内に入り、psqlコマンドで入れるようです。 ``` /app # psql -h db -U postgres Password for user postgres: psql (14.1) Type "help" for help. postgres=# exit /app # ```
ikore908

2022/01/23 12:40

すみませんよくわかっていなかったのですがやはりうまくいっていないようです…。 下記コマンドにてテーブル一覧を表示させようとすると.s.PGSQL.5432が無いというエラーとなります。 /app # psql -l psql: error: connection to server on socket "/run/postgresql/.s.PGSQL.5432" failed: No such file or directory Is the server running locally and accepting connections on that socket? また psqlにて直ログイン後に\lコマンドでテーブル一覧を見ても、テーブルが作られていないようです。 postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows)

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです