![](/img/trans.png)
[英]Symfony 4 “Connection refused” while trying to connect to docker mysql container
[英]Symfony 4 connection on Mysql docker container
我將 docker 用於 MySql 和 Adminer 接口,Adminer 和 MySql 之間的連接有效但 Symfony 連接被拒絕。 Symfony 不在容器中。
我可以為 Symfony 4 和 MySql 容器之間的連接做些什么?
這是我的 docker-compose.yml :
version: '3'
services:
mysql:
image: mysql:5.7
volumes:
- ./data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "rootpwd"
MYSQL_USER: 'testuser'
MYSQL_PASSWORD: 'testpassword'
adminer:
image: adminer
restart: always
ports:
- 8080:8080
links:
- mysql:db
volumes:
mysql:
我在 symfony 4 上的 .env:
# This file defines all environment variables that the application needs.
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE.
# Use ".env.local" for local overrides during development.
# Use real environment variables when deploying to production.
# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=825aa371242c34bdcc0c693ac4241bcf
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
#TRUSTED_HOSTS='^localhost|example\.com$'
###< symfony/framework-bundle ###
###> doctrine/doctrine-bundle ###
# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# Configure your db driver and server_version in config/packages/doctrine.yaml
DATABASE_URL=mysql://testuser:testpassword@127.0.0.1:3306/dbname
###< doctrine/doctrine-bundle ###
和我的學說.yml:
parameters:
# Adds a fallback DATABASE_URL if the env var is not set.
# This allows you to run cache:warmup even if your
# environment variables are not available yet.
# You should not need to change this value.
#env(DATABASE_URL): ''
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(resolve:DATABASE_URL)%'
unix_socket: /tmp/mysql.sock
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
更新
好吧,感謝您的幫助,它起作用了,Symfony 或更特別的是學說未找到容器,就像您說的那樣我暴露了 Mysql 端口,但我必須進行其他更改:這條線對我有用:
DATABASE_URL=mysql://root:root@127.0.0.1:3306/dbname
而不是這一行:
DATABASE_URL=mysql://testuser:testpassword@127.0.0.1:3306/dbname
事實上,我的 docker-compose up 似乎不能很好地工作並且使用舊版本進行組合,docker 沒有“看到”我在 docker-compose.yml 上的更改,因此密碼和用戶保持“root”。 我要試試這個: https : //forums.docker.com/t/how-to-delete-cache/5753/2和這個: https : //github.com/docker/compose/issues/1487
有時,需要刪除數據庫 => 警告:Docker 特定變量僅在您使用空數據目錄啟動容器時才有效; 在容器啟動時,任何預先存在的數據庫都將保持不變。 https://hub.docker.com/_/postgres/
您需要公開數據庫端口,例如。
version: '3'
services:
mysql:
image: mysql:5.7
volumes:
- ./data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "rootpwd"
MYSQL_USER: 'testuser'
MYSQL_PASSWORD: 'testpassword'
ports:
- 3306:3306
adminer:
image: adminer
restart: always
ports:
- 8080:8080
links:
- mysql:db
volumes:
mysql:
然后在.env
文件中
DATABASE_URL=mysql://testuser:testpassword@127.0.0.1:3306/dbname
確保 ip 地址與您的 docker 主機的 IP 匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.