LoginSignup
1
0

More than 1 year has passed since last update.

Rails×Dockerを使ってアプリケーション作成時に「Error response from daemon: Ports are not available: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.」が出た時の対策

Last updated at Posted at 2022-03-14

タイトル通りですが、Rails×Dockerを使って

docker-compose run web rails new . --force --no-deps --database=mysql

を実行した際に

Error response from daemon: Ports are not available: listen tcp 0.0.0.0:3306:
bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

が起きてつまづいてしまったので備忘録としてつけておきます。

versionに関しては

ruby: 2.7.5
docker:20.10.12

解決策

deeplで翻訳してみる。

デーモンからのエラー応答。listen tcp 0.0.0.0:3306:
bind: 通常、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)は1回のみ使用可能です。

既にポートが使われている感じなので変更してみる。

docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: root
    ports:
-     - "3306:3306"
+     - "3307:3306"
    volumes:
      - ./tmp/db:/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:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

docker-compose.ymlのports部分の左側3306を3307に変更すればいけました。
ちなみに右側はコンテナをを表しており、コンテナ間の通信は3306が使われているらしいので変更はしない方がいいかも。

もしかしたら起動している際にも他のコンテナ間でポートの干渉するのかな
今はDockerを動かしている個数が少ないのでいいけど、もし干渉するならいちいち変更するのはめんどくさい感じがする。

結果

Done in 96.00s.
Webpacker successfully installed 🎉 🍰

無事行けて安心した。

ちなみに

余談ですがポートの干渉していた番号3306を調べてみると
"mysql.exe"でした。

このプロセスを削除するだけでも大丈夫な気がします。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0