前提
前提としては、dockerでwebとdbのコンテナをそれぞれ立てて、webコンテナにphpをインストールして、dbコンテナにmysqlをインストールしているとします。
なにが起きた?
$link = mysqli_connect(‘localhost’, $dbUsername, $dbPassword, $dbDatabase);
上記のようにphpからmysqlを利用しようとするとno such file or directoryエラーになって接続できない!
解決方法
docker-composeで定義したservice間での呼び出しは対象のservice名を指定してあげることでアクセス可能です。
今回でいうとdbコンテナのサービス名はmysqlにしているので、localhostの部分をmysqlに書き換えて以下のようにすればいいです。
$link = mysqli_connect(‘mysql’, $dbUsername, $dbPassword, $dbDatabase);
これで無事mysqにアクセスすることができました。
docker-compose.ymlの抜粋
version: '3.8'
services:
mysql:
container_name: mysql
build:
context: .
dockerfile: db/Dockerfile
ports:
- "3306:3306"
volumes:
- ./db/my.cnf:/etc/mysql/conf.d/my.cnf
env_file:
- ../src/.env
networks:
- hoge_network
コメント