mysqlイメージを作成してポートを3306に公開するためのdocker-composeファイルがありますが、CMSをインストールしようとすると、データベースに接続できないというエラーが表示されます。ポート3306をスキャンしようとすると、ポート3306が開いているので、mysqlが実行されていることがわかります。
2つのDockerコンテナがお互いを認識できないのはなぜですか?
これが私のdocker-composeファイルです:
phpfpm:
restart: always
extends:
file: php-fpm-5.6.yml
service: phpfpm
links:
- db:db
nginx:
restart: always
image: nginx
ports:
- "8000:80"
links:
- phpfpm:phpfpm
volumes:
- ./nginx/vhost.conf:/etc/nginx/conf.d/default.conf
- ./app:/var/www/html
- ./log/nginx:/var/log/nginx
db:
restart: always
image: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_DATABASE: database
データベースに接続するには、ホスト名として指定したリンク/エイリアスを使用します。したがって、CMSはdb
ホスト名およびポート3306としてMySQLに接続できます。
「localhost」は各コンテナ内のlocalhostであるため、localhostまたは127.0.0.1に接続できません。したがって、phpfpmコンテナで「localhost」を使用すると、phpfpmコンテナ内のMySQLデータベースに接続しようとしますが、そこで実行されているサーバーはありません。
リンクされたコンテナ内からデータベースに接続するだけの場合は、MySQLポートを公開(
"3306":"3306"
)する必要がないことに注意してください。ポートを公開すると、「インターネット」である可能性のあるパブリックネットワークインターフェイスでMySQLが公開されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加