在运行 php artisan migration 的容器中,我不断收到此错误
In Connector.php line 67:
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
In Connector.php line 67:
PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known
这是我的.ENV文件
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:etukbJpSLgbRsdf5uOEGtLT5Qw+XB6y06Q38HPr
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://127.0.0.1:8000/
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=project
DB_USERNAME=root
DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
我试图将DB_HOST更改为mysql,但结果仍然相同,并将其更改为mariadb
这是我的docker-compose文件
version: '3'
services:
# The Application
app:
build:
context: ./
dockerfile: app.dockerfile
working_dir: /var/www
volumes:
- ../.:/var/www
- ./custom.ini:/usr/local/etc/php/conf.d/custom.ini
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
# The Web Server
web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes:
- ../.:/var/www
- ./vhost.conf:/etc/nginx/conf.d/default.conf
ports:
- 8082:80
# The Database
database:
image: mysql:5.7
volumes:
- dbdata:/var/lib/mysql
environment:
MYSQL_USER: ${DB_USERNAME}
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- "33061:3306"
volumes:
dbdata:
我在线搜索解决方案,但没有一个帮助。有人对我为什么会继续出现该错误有任何建议吗?
答案 0 :(得分:1)
您应该将container_name添加到数据库服务
database:
image: mysql:5.7
container_name: database
并在.env MYSQL_HOST中将该名称引用为:
MYSQL_CONNECTION=mysql
MYSQL_HOST=database
MYSQL_PORT=3306
而不是使用localhost
您还应该使用网络连接数据库服务和应用程序
在docker-compose的末尾添加一个网络块
networks:
app-network:
driver: bridge
并将此块添加到数据库服务和应用服务的结尾
demo_db:
.
.
.
networks:
- app-network
app:
.
.
.
networks:
- app-network
这是一个用于演示简单laravel应用的工作演示
答案 1 :(得分:0)
如果要作为外部docker容器连接到mysql,请确保已实现此解决方案https://github.com/igorkowalczyk/blog
答案 2 :(得分:0)