我在 ubuntu 机器上安装了 docker,我正在尝试运行一个 laravel 应用程序。
MySQL 服务service_name: mysql
在 docker-compose.yml 文件和 .env 文件中有DB_HOST=mysql
.
我记得 .env 文件应该指出DB_HOST=mysql
指向 mysql docker 服务 IP。然而这并没有发生,在运行迁移后我得到:
Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution (SQL: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')
首先我跑了docker-compose build
,然后我跑了,我docker-compose up -d
所有的 3 个服务都启动并运行了。
如果我提取 MySQL 服务的 IP 并在这样的.env
文件中使用它:
DB_HOST=172.18.0.2
然后我可以成功运行迁移,在这种情况下一切正常。
但是,我认为这是不好的做法,因为如果重新启动 MySQL 服务,IP 地址可能会更改。我在这里遗漏了什么,为什么service_name
在我的.env
文件中使用DB_HOST
无法解析数据库主机名?
码头工人-compose.yml:
version: '3'
networks:
laravel:
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
- ./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:
- "3306:3306"
volumes:
- ./mysql:/var/lib/mysql
environment:
MYSQL_DATABASE: laraone
MYSQL_USER: laraone_user
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- laravel
php:
build:
context: .
dockerfile: Dockerfile
container_name: php
volumes:
- ./src:/var/www/html
depends_on:
- mysql
ports:
- "9000:9000"
networks:
- laravel
慕少森
郎朗坤
慕森王