docker-compose mysql访问被用户symfony@'172.18.0.1'拒绝

问题描述

我在运行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吗?

如何解决此问题?

解决方法

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

,

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


如果docker-host是一台远程计算机,并且我们要连接到该远程计算机上运行的容器,则需要连接到该远程计算机的网络地址或DNS名称(即名称/物理网络,而不是docker-internal网络。本质上,我们将用于SSH进入机器的地址。


如果要从同一网络中的另一个容器访问数据库,则可以按其名称引用该容器。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...