docker-compose mysql 容器拒绝访问 wordpress 容器

Posted

技术标签:

【中文标题】docker-compose mysql 容器拒绝访问 wordpress 容器【英文标题】:docker-compose mysql container denies access to wordpress container 【发布时间】:2017-10-12 08:51:50 【问题描述】:

我遇到了 mysql 5.7 容器拒绝访问 wordpress 容器的问题。我正在使用 docker-compose,我在 Mac OSX 上运行 docker。 Docker 应该是可用的最新版本。

这是我的 docker-compose.yml

version: '2'

services:
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    container_name: wordpress
    ports:
      - "8000:80"
      - "443:443"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: blog
      WORDPRESS_DB_USER: blog_admin
      WORDPRESS_DB_PASSWORD: userpasswd
    networks:
      - wordpress_net
  db:
    image: mysql:5.7
    container_name: db
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpasswd
      MYSQL_DATABASE: blog
      MYSQL_USER: blog_admin
      MYSQL_PASSWORD: userpasswd
    networks:
      - wordpress_net
networks:
  wordpress_net:
volumes:
  db_data:

来自 db 容器的日志是:

2017-05-12T23:28:06.138429Z 321 [Note] Access denied for user 'blog_admin'@'172.19.0.3' (using password: YES)

来自 wordpress 容器的日志是:

MySQL Connection Error: (1045) Access denied for user 'blog_admin'@'172.19.0.3' (using password: YES)
Warning: mysqli::mysqli(): (HY000/1045): Access denied for user 'blog_admin'@'172.19.0.3' (using password: YES) in - on line 22

码头工人ps:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
1b02f0146fe7        wordpress:latest    "docker-entrypoint..."   25 minutes ago      Up 26 seconds       0.0.0.0:443->443/tcp, 0.0.0.0:8000->80/tcp   wordpress
5d932ed6c269        mysql:5.7           "docker-entrypoint..."   25 minutes ago      Up 25 minutes       0.0.0.0:3306->3306/tcp                       db

我尝试了什么:

    正在重新启动 docker 主机。 docker-compose rm -v 然后 docker-compose up -d 再次。 在 wordpress 容器之外使用这些用户凭据和 root 凭据登录。 删除 docker 映像并从头开始重新拉取它们。 在WORDPRESS_DB_HOST, WORDPRESS_DB_USER 中使用根凭据

当我连接到 db 容器时,我可以看到 db 的所有环境变量。 Wordpress 容器不断自我重启。我看到一个关于堆栈溢出的答案,建议刷新权限并设置新用户帐户,但我想知道我是否做错了可能导致此问题再次出现在其他机器上。

【问题讨论】:

你能用phpmyadmin来检查你的root_user的“Host”是否设置为“%”吗?也在您的 docker-compose 中尝试在您的 wordpress-service 中使用“-links:-db” @ad_on_is 您好,我的问题现在已解决。是的,我尝试将 phpmyadmin 添加到 docker-compose.yml 但它不起作用,因为即使以 root 身份我也无法连接到 mysql。即使我将 root 密码留空,它也会拒绝访问。所以甚至 phpmyadmin 都无法连接到它。尽管如此,我还是通过接受的答案中描述的方法修复了它。 【参考方案1】:

更改:

WORDPRESS_DB_USER: blog_admin
WORDPRESS_DB_PASSWORD: userpasswd

收件人:

WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: rootpasswd

然后:

docker-compose up -d --build

您的用户名Blog_admin 无权访问create database

【讨论】:

我已经这样做了,但结果似乎是一样的。这次我得到了相同的错误日志,用于 root【参考方案2】:

我做了什么:

docker-compose rm -v 对我不起作用,因为我一直使用docker-compose down 来关闭容器。我认为这是问题的根源。

我删除了带有docker-compose.yml 的文件夹并创建了一个新文件夹。 然后我创建了一个仅包含 mysql 容器配置的 compose 文件,启动它并尝试以 root 的身份连接到 mysql 服务器。 成功了。然后我不得不用docker stop containerID 停止容器。 然后我运行docker-compose rm -v(出于某种原因,rm -v 仅在您停止容器时有效。当您使用docker-compose down 时,这会导致数据库的状态持续存在,因为我为数据库容器使用了一个卷)和使用 wordpress 容器配置完成 yml 文件。

我得到了这样的结果:

version: '2'

services:
  wordpress:
    image: wordpress:latest
    container_name: wordpress-blog
    depends_on:
      - mysql
    ports:
      - "8000:80"
      - "443:443"
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: admin
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
  mysql:
    image: mysql:5.7
    container_name: mysql-db
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: admin
      MYSQL_PASSWORD: password 

注意:我之前遇到的问题不仅是从 wordpress 容器连接到数据库,还从 db 容器本身连接到数据库。我上面描述的方法帮助我解决了这个问题。

【讨论】:

我遇到了类似的问题。我的解决方案是在 docker-compose.yaml 文件中更改卷的名称,然后运行:docker-compose up -d --build' 然后,在容器运行时,我使用:'docker system prune --volumes ' 以摆脱旧的、过时的卷。

以上是关于docker-compose mysql 容器拒绝访问 wordpress 容器的主要内容,如果未能解决你的问题,请参考以下文章

Mariadb docker容器无法使用Python连接到主机上的MySQL服务器(111连接被拒绝)

docker compose MySQL 容器 [2002] 连接被拒绝

Postgres 容器连接被拒绝

在dind中运行docker-compose时Docker容器拒绝通信 - Gitlab CI/CD

docker-compose 中的 MySQL -- 访问被拒绝

在 docker-compose 期间尝试访问容器中的文件时权限被拒绝(UBUNTU 20.04)