我在ubuntu机器上安装了docker,我正在尝试运行laravel应用。
MySQL服务的docker-compose.yml文件中包含service_name: mysql
,而.env文件中的DB_HOST=mysql
中。
我记得.env文件应该弄清楚DB_HOST=mysql
指向mysql docker service 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
的{{1}}文件中使用.env
不能解析数据库主机名?
docker-compose.yml:
DB_HOST
.env:
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
答案 0 :(得分:3)
我认为您尝试在 php docker 容器外运行“php artisan migrate”命令。
您应该在 php 容器中运行 php artisan migrate 命令。
尝试以下;
docker ps --> list running containers
docker exec -it <your_container_id> bash
现在你可以运行了;
php artisan migrate
答案 1 :(得分:0)
我通过在php容器中安装laravel应用程序解决了该问题。简单的1行命令帮助我解决了这个问题:docker exec -it php php artisan app:install