[英]Docker can't connect to MySQL running docker-compose up
我正在使用這個 Docker 配置: https : //github.com/romaricp/kit-starter-symfony-4-docker
我使用以下方法啟動環境:
docker-compose 構建
其次是:
docker-compose up -d
一切正常,但 MySQL 服務出現問題。 我收到一個 Symfony 錯誤:
“驅動程序發生異常:找不到驅動程序”
以及當我嘗試登錄數據庫時的 PMA 錯誤:
mysqli_real_connect(): php_network_getaddresses: getaddrinfo 失敗: 名稱無法解析
知道我怎么能讓它工作嗎?
docker-compose.yml:
version: '3'
services:
apache:
build: .docker/apache
container_name: sf4_apache
ports:
- 80:80
volumes:
- .docker/config/vhosts:/etc/apache2/sites-enabled
- .:/home/wwwroot/sf4
depends_on:
- php
mysql:
image: mysql
container_name: sf4_mysql
volumes:
- .docker/data/db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sf4
MYSQL_USER: sf4
MYSQL_PASSWORD: sf4
php:
build: .docker/php
container_name: sf4_php
volumes:
- .:/home/wwwroot/sf4
environment:
- maildev_host=sf4_maildev
depends_on:
- maildev
- mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: sf4_phpmyadmin
ports:
- 8080:80
links:
- mysql
maildev:
image: djfarrelly/maildev
container_name: sf4_maildev
ports:
- 8001:80
我也打開了 mysql 日志,我看到了這個:
2019-04-07T12:00:30.943414Z 0 [系統] [MY-010931] [服務器] /usr/sbin/mysqld:准備好連接。 版本:'8.0.15' 套接字:'/var/run/mysqld/mysqld.sock' 端口:3306 MySQL 社區服務器 - GPL。
也許端口錯誤,這就是我無法連接的原因?
我認為您在鏈接容器時遇到了問題。 我建議您使用自定義網絡而不是鏈接。 所有容器都可以看到彼此
對於phpmyadmin
服務,我認為您應該像這樣設置PMA_HOST
和PMA_PORT
環境變量:
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: sf4_phpmyadmin
environment:
PMA_HOST: mysql
PMA_PORT: 3306
ports:
- 8080:80
links:
- mysql
你的 mysql 容器應該在開始時有command
指令來設置身份驗證插件(mysql 8 的連接器有問題),更多細節在這里
mysql:
image: mysql
container_name: sf4_mysql
command: "--default-authentication-plugin=mysql_native_password"
volumes:
- .docker/data/db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sf4
MYSQL_USER: sf4
MYSQL_PASSWORD: sf4
在你的 Symfony 應用程序中,連接字符串位於.env
文件中,它應該具有以下格式:
DATABASE_URL=mysql:// mysql_user : mysql_user_password @ mysql_host : mysql_port / db_name
mysql_user :您的 mysql 用戶(例如:root)
mysql_user_password :用戶的密碼(例如:root)
mysql_host :應包含位於
docker-compose.yml
文件中的 mysql 容器服務名稱(本例中為 mysql)mysql_port : mysql 容器內部端口(本例中為 3306)
db_name :要連接的數據庫。
DATABASE_URL 可以是這樣的:
DATABASE_URL=mysql://root:root@mysql:3306/sf4
在這些更改后停止您的容器並再次啟動它們。
希望這會有所幫助。
您必須公開mysql端口3306:
mysql:
image: mysql
container_name: sf4_mysql
volumes:
- .docker/data/db:/var/lib/mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sf4
MYSQL_USER: sf4
MYSQL_PASSWORD: sf4
networks:
- default
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.