【问题标题】:docker-compose mysql Access denied for user symfony@'172.18.0.1'docker-compose mysql 拒绝用户 symfony@'172.18.0.1' 的访问
【发布时间】:2020-08-24 19:26:34
【问题描述】:

我在运行 Symfony4 项目时遇到了数据库问题。

docker-compose.yml

db:
    environment:
      MYSQL_DATABASE: ${DATABASE_NAME}
      MYSQL_PASSWORD: ${DATABASE_PASSWORD}
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
      MYSQL_USER: ${DATABASE_USERNAME}
    image: 'mariadb/server:10.4'
    ports:
      - '3306:3306'
    volumes:
      - 'db-data:/var/lib/mysql'

.env

DATABASE_URL=mysql://symfony:symfony@db.localhost/symfony
###< doctrine/doctrine-bundle ###
DB_HOST=db.localhost
DB_NAME=symfony
DB_USERNAME=symfony
DB_PASSWORD=symfony
DATABASE_PORT=3306
DATABASE_HOST=db.localhost
DATABASE_USERNAME=symfony
DATABASE_PASSWORD=symfony
DATABASE_NAME=symfony
DATABASE_PORT=3306
PROJECT_NAME=oversight-api

我收到一个错误Access denied for user symfony@172.18.0.1 我不确定172.18.0.1 是什么。我应该将db.localhost 添加到/etc/hosts 吗?

如何解决这个问题?

【问题讨论】:

  • 当您启动 docker 时,它会创建自己的网络,172.18.0.0 是它为 docker 层创建的网络。它允许您在不知道 IP 地址的情况下坐在 docker-container1 上 ping docker-container2。我认为显而易见的问题是,您是否在 MySQL 容器中创建了用户 symfony 并授予它访问数据库的权限?
  • @user1628449 我没有做任何事情,包括添加symfony 用户。我刚刚执行了docker-compose up -d
  • @user1628449 这不是真的。容器是通过环境变量配置的。特别是,通过环境变量创建的用户是超级用户。我能够使用给定的确切配置在本地启动容器。

标签: php docker docker-compose mariadb symfony4


【解决方案1】:

如果您使用的是 mac,您可以通过 host.docker.internal 解析数据库 url。 在其他操作系统上,您可以在 docker_compose.yaml 中使用 container_name: my_db 命名您的容器,并使用 my_db 作为主机

【讨论】:

  • 我使用的是 Ubuntu
  • 在这种情况下尝试命名容器,它应该自己解析IP
【解决方案2】:

我们可以连接到localhost,而不是连接到172.18.0.1。我们将容器端口3306转发到本地机器端口3306,因此可以通过localhost访问该端口。


如果docker-host是远程机器,而我们要连接远程机器上运行的容器,我们需要连接远程机器的网络地址或DNS名称(即名称/地址物理网络,而不是 docker-internal 网络。本质上是我们用来 ssh 进入机器的地址。


如果我们想从同一网络中的另一个容器访问数据库,我们可以通过容器名称来引用该容器。

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2017-10-12
    • 2020-03-17
    • 2020-11-13
    • 2018-11-28
    • 2017-07-19
    • 2019-01-24
    • 2016-03-08
    相关资源
    最近更新 更多