symfony4连接

30byixjq  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(428)

我使用docker for mysql和adminer接口,adminer和mysql之间的连接正常,但symfony连接被拒绝。symfony不在容器里。
我能为symfony4和mysql container works之间的连接做些什么?
这是我的docker-compose.yml:

  1. version: '3'
  2. services:
  3. mysql:
  4. image: mysql:5.7
  5. volumes:
  6. - ./data:/var/lib/mysql
  7. environment:
  8. MYSQL_ROOT_PASSWORD: "rootpwd"
  9. MYSQL_USER: 'testuser'
  10. MYSQL_PASSWORD: 'testpassword'
  11. adminer:
  12. image: adminer
  13. restart: always
  14. ports:
  15. - 8080:8080
  16. links:
  17. - mysql:db
  18. volumes:
  19. mysql:

symfony 4上的my.env:

  1. # This file defines all environment variables that the application needs.
  2. # DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE.
  3. # Use ".env.local" for local overrides during development.
  4. # Use real environment variables when deploying to production.
  5. # https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
  6. ### > symfony/framework-bundle ###
  7. APP_ENV=dev
  8. APP_SECRET=825aa371242c34bdcc0c693ac4241bcf
  9. # TRUSTED_PROXIES=127.0.0.1,127.0.0.2
  10. # TRUSTED_HOSTS='^localhost|example\.com$'
  11. ### < symfony/framework-bundle ###
  12. ### > doctrine/doctrine-bundle ###
  13. # Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
  14. # For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
  15. # Configure your db driver and server_version in config/packages/doctrine.yaml
  16. DATABASE_URL=mysql://testuser:testpassword@127.0.0.1:3306/dbname
  17. ### < doctrine/doctrine-bundle ###

还有我的教义

  1. parameters:
  2. # Adds a fallback DATABASE_URL if the env var is not set.
  3. # This allows you to run cache:warmup even if your
  4. # environment variables are not available yet.
  5. # You should not need to change this value.
  6. #env(DATABASE_URL): ''
  7. doctrine:
  8. dbal:
  9. # configure these for your database server
  10. driver: 'pdo_mysql'
  11. server_version: '5.7'
  12. charset: utf8mb4
  13. default_table_options:
  14. charset: utf8mb4
  15. collate: utf8mb4_unicode_ci
  16. url: '%env(resolve:DATABASE_URL)%'
  17. unix_socket: /tmp/mysql.sock
  18. orm:
  19. auto_generate_proxy_classes: true
  20. naming_strategy: doctrine.orm.naming_strategy.underscore
  21. auto_mapping: true
  22. mappings:
  23. App:
  24. is_bundle: false
  25. type: annotation
  26. dir: '%kernel.project_dir%/src/Entity'
  27. prefix: 'App\Entity'
  28. alias: App

更新
好吧,谢谢你的帮助它工作了,symfony或者更特别的是没有找到容器,就像你说的我暴露了mysql端口,但是我必须做一个其他的改变:这行代码对我有用:

  1. DATABASE_URL=mysql://root:root@127.0.0.1:3306/dbname

不是这句话:

  1. 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/

3bygqnnd

3bygqnnd1#

您需要像eg一样公开数据库端口。

  1. version: '3'
  2. services:
  3. mysql:
  4. image: mysql:5.7
  5. volumes:
  6. - ./data:/var/lib/mysql
  7. environment:
  8. MYSQL_ROOT_PASSWORD: "rootpwd"
  9. MYSQL_USER: 'testuser'
  10. MYSQL_PASSWORD: 'testpassword'
  11. ports:
  12. - 3306:3306
  13. adminer:
  14. image: adminer
  15. restart: always
  16. ports:
  17. - 8080:8080
  18. links:
  19. - mysql:db
  20. volumes:
  21. mysql:

然后在 .env 文件

  1. DATABASE_URL=mysql://testuser:testpassword@127.0.0.1:3306/dbname

确保ip地址与docker主机的ip匹配。

展开查看全部

相关问题