【发布时间】:2020-03-14 11:11:37
【问题描述】:
我有一个奇怪的问题,即为本地开发人员 dockerising 一个 Laravel 应用程序。 PHP 容器需要 mysql 容器的 docker 内部 IP 地址,而不是 127.0.0.1,否则会中断并显示以下消息:
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from `users` where `email` = jr@m3u.com limit 1)
如果我使用检查命令:docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
我可以看到每个容器的 172 个范围 IP 地址,如果我在 Laravel 的 .env 文件中将 mysql 服务器更改为 172.31.0.2,那么应用程序就可以正常工作。
这是我的 docker-compose.yml 文件:
version: '3'
networks:
laravel:
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8888:80"
volumes:
- ../src:/var/www
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
networks:
- laravel
mysql:
image: mysql:5.7.22
container_name: mysql
restart: unless-stopped
tty: true
ports:
- 3310:3306
environment:
MYSQL_DATABASE: docker
MYSQL_USER: docker
MYSQL_PASSWORD: docker
MYSQL_ROOT_PASSWORD: root
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./mysql:/var/lib/mysql
networks:
- laravel
php:
build:
context: .
dockerfile: Dockerfile
container_name: php
volumes:
- ../src:/var/www
ports:
- "9000:9000"
networks:
- laravel
任何帮助将不胜感激。 :-)
【问题讨论】:
-
你的mysql不是一个不同的容器吗?所以 127.0.0.1 不起作用。您的设置按预期工作。将每个新容器视为不同的服务器。