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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby on Rails 6

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

Docker

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

解決済

【Docker】コンテナ上にDBを作成する際に「Ports are not available 〜 address already in use」が発生する

black_pasta1001
black_pasta1001

総合スコア19

Ruby on Rails 6

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

Docker

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

1回答

0評価

0クリップ

594閲覧

投稿2022/01/06 12:51

既存のrailsアプリにdocker環境を導入していたところ、[docker-compose run web bundle exec rake db:create]実行時にタイトルのエラーが発生しました。ネットで検索した方法で解決できなかったのでどなたか助けて頂きたく存じます。

#発生経緯

①下記3ファイルを作成

Dockerfile

FROM ruby:3.0.2 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn WORKDIR /my_app COPY Gemfile /my_app/Gemfile COPY Gemfile.lock /my_app/Gemfile.lock RUN gem install bundler RUN bundle install COPY . /my_app RUN yarn install --check-files RUN bundle exec rails webpacker:compile COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]
#docker-compose.yml version: "3" services: db: image: mysql:8.0.26 environment: MYSQL_ROOT_PASSWORD: password ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/my_app ports: - "3000:3000" depends_on: - db stdin_open: true tty: true volumes: mysql-data: driver: local
#entrypoint.sh #!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /アプリ名/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@"

②docker imageをビルド

$ docker-compose build [+] Building 427.9s (18/18) FINISHED

③Dockerコンテナ上にデータベースを作成
タイトルのエラー発生

$ docker-compose run web bundle exec rake db:create Starting my_app_db_1 ... error ERROR: for my_app_db_1 Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use ERROR: for db Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use ERROR: Encountered errors while bringing up the project.

#試したこと

$ sudo lsof -i -P | grep "LISTEN" mysqld 40347 _mysql 19u IPv4 0xb4ab58fb49e4ab55 0t0 TCP localhost:33060 (LISTEN) mysqld 40347 _mysql 21u IPv4 0xb4ab58fb4a896b55 0t0 TCP localhost:3306 (LISTEN) $ sudo kill -9 40347 $ sudo lsof -i -P | grep "LISTEN" #停止できた確認すると違うIDでmysqldが復活していました。 mysqld 40432 _mysql 19u IPv4 0xb4ab58fb463fcdcd 0t0 TCP localhost:33060 (LISTEN) mysqld 40432 _mysql 21u IPv4 0xb4ab58fb463f9b55 0t0 TCP localhost:3306 (LISTEN)
#mysqlサーバーを停止しようとするとこれはこれでエラーが発生してしまいます。 $ sudo mysql.server stop ERROR! MySQL server PID file could not be found!
#docker-compose.yml db: image: mysql:8.0.26 environment: MYSQL_ROOT_PASSWORD: password ports: - "3307:3306" #左の数字を変更して試してみましたがダメでした。 volumes: - mysql-data:/var/lib/mysql

#database.yml

default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password socket: /tmp/mysql.sock development: adapter: mysql2 encoding: utf8 reconnect: false database: my_app_development pool: 5 username: username password: password host: localhost test: adapter: mysql2 encoding: utf8 reconnect: false database: my_app_test pool: 5 username: username password: password host: localhost production: <<: *default database: <%= Rails.application.credentials.db[:database] %> username: <%= Rails.application.credentials.db[:username] %> password: <%= Rails.application.credentials.db[:password] %> socket: <%= Rails.application.credentials.db[:socket] %>

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby on Rails 6

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

Docker

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