DockerでDBのコンテナが機能しない
背景
DockerでWordpressとMySQLのコンテナを作り、ネットワークでつないで、localhostにアクセスしたい。
環境は以下の通り。
ホストOS : Windows 11
Docker : version 20.10.20
ターミナル環境 : Git bash
そして、実行したコマンドは以下の通り。
まず、ネットワークを作る。
docker notwork create wordpress_demo
次に、MySQLのコンテナを作る。
docker run --name mysql -dit --net=wordpress_demo -e MYSQL_ROOT_PASSWORD=myrootpassword -e MYSQL_DATABASE=wordpwessdb -e MYSQL_USER=me -e MYSQL_PASSWORD=mypassword mysql:8.1 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql-plugin=mysql_native_password
最後に、Wordpressのコンテナを作る。
docker run --name wordpress -dit --net=wordpress_demo -p 8085:80 -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_NAME=wordpressdb -e WORDPRESS_DB_USER=me -e WORDPRESS_DB_PASSWORD=mypassword wordpress
問題
しかし、localhostにアクセスしてみると、
![](https://assets.st-note.com/img/1696078408251-QumJwUG1bZ.png?width=800)
そこでさらにMySQLのログを見ると
Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?.
と表示される。
はて、これはいったい何だろう??
原因
とりあえず、以下の方法で解決策を探る。
bing/ググる
ChatGPT
公式ドキュメント
Github
そして、以下の原因を検証した。
1. Docker Daemonは起動してる?
エラー文で聞かれていることそのままですが、明らかにDocker Daemonは起動してますね。
Dockerfileから作ったwordpressコンテナはきちんと動いているようですし。
![](https://assets.st-note.com/img/1696079036608-8hfAwT2mLl.png?width=800)
![](https://assets.st-note.com/img/1696081572163-JnZg7yxqKR.png?width=800)
こうなるとDocker Daemonに問題があるのではなく、コンテナの作り方に問題があるかもしれません。
2.DaemonがTCPでリッスンするように設定する
ChatGPT先生が教えてくれました。
提示された解決策としてはdaemon.jsonのhostを
{
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
に変えるとのことです。
とりあえず、自分のDockerには、windows-daemon-option.jsonとlinux-daemon-option.jsonの二つがあったので、変えてみました。。。。
ダメですね。
3. TCPポート2375を予約する
Githubにこんなイシューがありました。
そこでGithubにある通り、
netsh int ipv4 add excludedportrange protocol=tcp startport=2375 numberofports=1
を実行。少し解説をすると、
netsh: ネットワーク設定を変更するためのコマンド。
int ipv4: "int"は"interface"の略でIPv4設定を対象とすることを指定。
add excludedportrange: 予約ポート範囲を追加することを指定。
protocol=tcp: TCPプロトコルを使用するポートを予約することを指定。
startport=2375: 予約を開始するポート番号(2375番ポート)を指定。
numberofports=1: 予約するポートの数を指定(1つのポート)。
しかし、これが表示される。
The process cannot access the file because it is being used by another process.
え、誰か先客おる?調べてみよう。
netstat -nao
![](https://assets.st-note.com/img/1696081145324-GbK6buBsOb.png?width=800)
いた、2375。
プロセス番号は25740。タスクマネージャーで調べるか。
![](https://assets.st-note.com/img/1696081210011-nx4QNh6Nyv.png?width=800)
いや、お前かい。バリバリLISTENINGしてるやん。
コンテナのつくり方違うのでは?
こうなると、いよいよコンテナに問題があるのではと思ってしまう。
そこでもう一度コードを見直すと….なんと誤字があった。
MySQLのコンテナ作成のコードは正しくは
docker run --name mysql -dit --net=wordpress_demo -e MYSQL_ROOT_PASSWORD=myrootpassword -e MYSQL_DATABASE=wordpressdb -e MYSQL_USER=me -e MYSQL_PASSWORD=mypassword mysql:8.1 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql-plugin=mysql_native_password
でした。
以上。
この記事が気に入ったらサポートをしてみませんか?