简体   繁体   English

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

[英]docker-compose mysql container denies access to wordpress container

I have a problem with mysql 5.7 container denying access to wordpress container.我遇到 mysql 5.7 容器拒绝访问 wordpress 容器的问题。 I'm using docker-compose and I'm running docker on Mac OSX.我正在使用 docker-compose 并且在 Mac OSX 上运行 docker。 Docker should be on latest version available. Docker 应该是可用的最新版本。

Here's my docker-compose.yml这是我的 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:

Logs from db container are:来自数据库容器的日志是:

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

Logs from wordpress container are:来自 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

docker ps: docker 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

What have I tried:我试过什么:

  1. Restarting docker host.正在重启 docker 主机。
  2. docker-compose rm -v and then docker-compose up -d again. docker-compose rm -v 然后 docker-compose up -d 再次。
  3. Logging in with those user credentials and root credentials outside of wordpress container.使用 wordpress 容器之外的用户凭据和根凭据登录。
  4. Removing docker images and pulling them again from scratch.删除 docker 个图像并从头开始重新拉取它们。
  5. Using root credentials in WORDPRESS_DB_HOST, WORDPRESS_DB_USERWORDPRESS_DB_HOST, WORDPRESS_DB_USER中使用根凭据

I can see all the env vars for db when I connect to db container.当我连接到数据库容器时,我可以看到数据库的所有环境变量。 Wordpress container keeps restarting it self. Wordpress 容器不断自行重启。 I saw one answer on stack overflow which recommended flushing privileges and setting new user account but I want to know if I'm doing something wrong that could cause this problem to appear again on other machine.我在堆栈溢出上看到了一个建议刷新权限和设置新用户帐户的答案,但我想知道我是否做错了什么可能导致此问题再次出现在其他机器上。

Change:改变:

WORDPRESS_DB_USER: blog_admin
WORDPRESS_DB_PASSWORD: userpasswd

To:到:

WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: rootpasswd

And then:进而:

docker-compose up -d --build

Your username Blog_admin doesn't have access to create database .您的用户名Blog_admin无权create database

What have I done:我做了什么:

docker-compose rm -v hasn't worked for me as I've always used docker-compose down to shutdown containers. docker-compose rm -v对我不起作用,因为我一直使用docker-compose down来关闭容器。 And I think this is the root of the problem.我认为这是问题的根源。

  • I deleted the folder with my docker-compose.yml and created a new one.我用docker-compose.yml删除了该文件夹并创建了一个新文件夹。
  • Then I created a compose file with just the config for mysql container, launched it and tried to connect to the mysql server as root .然后我创建了一个仅包含mysql容器配置的 compose 文件,启动它并尝试以root身份连接到mysql服务器。
  • It worked.有效。 Then I had to stop the container with docker stop containerID .然后我不得不用docker stop containerID
  • Then I ran docker-compose rm -v (For some reason rm -v works only when you stop the container. Not when you use docker-compose down this caused the db's state to persist, as I used a volume for the db container) and completed the yml file with the wordpress container config.然后我运行docker-compose rm -v (出于某种原因, rm -v仅在您停止容器时才起作用。当您使用docker-compose down这会导致 db 的状态持续存在,因为我为 db 容器使用了一个卷)并使用 wordpress 容器配置完成 yml 文件。

I've ended up with something like this:我已经结束了这样的事情:

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 

NOTE: I had a problem previously not only connecting to the database from the wordpress container, but also from the db container itself.注意:我以前不仅从 wordpress 容器连接到数据库,而且从 db 容器本身也有问题。 The method I described above helped me to solve this issue.我上面描述的方法帮助我解决了这个问题。

Simple solution change简单的解决方案更改

volumes:
- db_data:/var/lib/mysql

to something like到类似的东西

volumes:
- db_data:/var/lib/mysqlx

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 连接到 docker-compose mysql 容器拒绝访问,但运行相同图像的 docker 不会 - connecting to a docker-compose mysql container denies access but docker running same image does not Docker-compose 从另一个容器访问 MySQL 容器 - Docker-compose MySQL container access from another container 将NodeJS Docker容器连接到MySQL Docker容器-docker-compose 3 - Connecting NodeJS Docker container to a MySQL Docker container - docker-compose 3 Docker-compose 容器连接到 MySql 不起作用 - Docker-compose container connection to MySql not working Docker Compose:将 WordPress 容器连接到 MySQL 容器? - Docker Compose: connect a WordPress container to a MySQL container? Tomcat容器和Mysql容器使用docker-compose连接 - Tomcat container and Mysql container join using docker-compose docker-compose:无法将应用程序容器与 mysql 容器连接 - docker-compose: Can't connect application container with mysql container Java 容器无法使用 docker-compose 连接到 MYSQL 容器 - Java container cant connect to MYSQL container with docker-compose MySql docker 容器,通过终端工作,通过 docker-compose no - MySql docker container, via terminal works, via docker-compose no 在没有docker-compose的情况下访问Docker(MySQL)容器? - Accessing Docker (MySQL) container without docker-compose?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM