既存のrailsアプリにdocker環境を導入していたところ、[docker-compose run web bundle exec rake db:create]実行時にタイトルのエラーが発生しました。ネットで検索した方法で解決できなかったのでどなたか助けて頂きたく存じます。
#発生経緯
①下記3ファイルを作成
Dockerfile
1FROM ruby:3.0.2 2RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ 3 && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list 4RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn 5 6 7WORKDIR /my_app 8COPY Gemfile /my_app/Gemfile 9COPY Gemfile.lock /my_app/Gemfile.lock 10RUN gem install bundler 11RUN bundle install 12COPY . /my_app 13 14RUN yarn install --check-files 15RUN bundle exec rails webpacker:compile 16 17COPY entrypoint.sh /usr/bin/ 18RUN chmod +x /usr/bin/entrypoint.sh 19ENTRYPOINT ["entrypoint.sh"] 20EXPOSE 3000 21 22CMD ["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] %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/06 13:52
2022/01/06 22:41
2022/01/07 00:05 編集
2022/01/07 00:11
2022/01/07 09:12