Docker

【docker-compose】「Can't start server : Bind on unix socket: Input/output error」のエラーが出た時の対処法

docker-composeでWordPressの環境を構築している際に「Can't start server : Bind on unix socket: Input/output error」が出たので、その対処法をここにメモしておきます。

「Can't start server : Bind on unix socket: Input/output error」の解消方法

エラーの内容

「$ docker-compose up -d」のコマンドを実行した時に以下のエラーが発生しました。

 エラー内容
Can't start server : Bind on unix socket: Input/output errorDo you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ?Aborting

対処法

mysqlの「volumes」はローカルのフォルダをマウントすることが難しいらしい。💦
そのため、対処法としてDockerのボリューム(mysql-data)とコンテナの/var/lib/mysqlを紐づけるようにします。

docker-compose.ymlの修正前から修正後のように変更したら行けました。

・修正前:

services: 
・・・・ 
  mysql: 
    image: mysql:5.7 
    volumes: 
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf 
      - ./db/mysql:/var/lib/mysql 
    ports: 
      - 3306:3306 
    environment: 
      - MYSQL_ROOT_PASSWORD=root 
      - MYSQL_DATABASE=test_db 
      - MYSQL_USER=test_user 
      - MYSQL_PASSWORD=test_password 
    command: --innodb-use-native-aio=0

・修正後:

services: 
・・・・ 
  mysql: 
    image: mysql:5.7 
    volumes: 
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf 
      - db_data:/var/lib/mysql 
    ports: 
      - 3306:3306 
    environment: 
      - MYSQL_ROOT_PASSWORD=root 
      - MYSQL_DATABASE=test_db 
      - MYSQL_USER=test_user 
      - MYSQL_PASSWORD=test_password 
    command: --innodb-use-native-aio=0
volumes: 
    db_data: {}

変更点

  • 変更「- ./db/mysql:/var/lib/mysql 」 ⇒ 「 - db_data:/var/lib/mysql 」
  • 追記
    volumes:
        db_data: {}

これで「$ docker-compose up -d」を実行したところ、正常にコンテナが作成されました。

さらに下図のようにDockerのボリュームが「wordpres_dev_db_data(<サービス名>_<ボリューム名>)」の名前で作成されました。

MySQLのデータはこの「db_data」ボリュームに保存されていく仕様のようです。

以上です。

-Docker