首页 > 解决方案 > 无法使用 docker-compose 将现有 MySQL Wordpress 数据库迁移到 Docker

问题描述

我正在尝试将预先存在的 Wordpress 安装从导出的 SQL 文件迁移到本地 Docker 开发环境。我对 Docker 有点陌生,但我已经阅读了一些教程和文档。问题似乎是“wordpress”和“phpmyadmin”服务无法访问数据库。

我在 Vim 中对 SQL 文件进行了搜索和替换,以将原始 URL 的实例替换为“ http://localhost:8000 ”。然后我使用了 docker-compose。

# docker-compose.yml
version: "3.7"
services:
  db:
    image: mysql:5.7.29
    volumes:
      - ./dbdata-import/:/docker-entrypoint-initdb.d/ # Where my exported SQL file is stored
      # I also tried -./dbdata-import/thedata.sql:/docker-entrypoint-initdb.d/thedata.sql
      - ./dbdata:/var/lib/mysql # So local database changes persist
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wp_database
      MYSQL_USER: wp_username
      MYSQL_PASSWORD: wp_password

  wordpress:
    depends_on:
      - db
    image: wordpress:php7.3-apache
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wp_username
      WORDPRESS_DB_PASSWORD: wp_password
      WORDPRESS_DB_NAME: wp_database
      WORDPRESS_TABLE_PREFIX: wp_ #Tried without and without this
      WORDPRESS_DEBUG: 1
    volumes:
      - ./wp-vol:/var/www/html

  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin:4.9.4
    container_name: phpmyadmin
    environment:
      PMA_HOST: db
      PMA_USER: admin
      PMA_PASSWORD: phpmyadmin_password
    restart: always
    ports:
      - "8080:80"

值得注意的是,我使用了这个修复程序,所以我仍然可以使用 OpenVPN。基本上,我通过运行docker network create localdev --subnet 10.0.1.0/24创建了一个子网。我还在 docker-compose.yml 旁边添加了这个文件:

# docker-compose.override.yml
version: '3.7'
networks:
  default:
    external:
      name: localdev

当我访问http://localhost:8000时,我什么也没有得到,并且浏览器超时。当我为 PHPMyAdmin访问http://localhost:8080时,出现错误:

MySQL said: Documentation
Cannot connect: invalid settings.
mysqli_real_connect(): (HY000/1045): Access denied for user 'admin'@'10.0.1.3' (using password: YES)
phpMyAdmin tried to connect to the MySQL server, and the server rejected the connection. You should check the host, username and password in your configuration and make sure that they correspond to the information given by the administrator of the MySQL server.

这似乎是一个凭证问题,这似乎很奇怪。我直接从主机服务器上的 wp-config.php 中提取了 Wordpress 数据库信息。我还通过登录主机服务器上的 MySQL CLI 测试了数据库、用户名和密码。

我完成后使用docker-compose down -v删除卷,并且docker volumes ls似乎为空。所以我不认为这是/docker-entrypoint-initdb.d/没有运行的问题,因为 MySQL 已经初始化。但是,我不确定。

我已经对此进行了一段时间的故障排除。我已经完成了几乎相同的 Docker 设置,没有/docker-entrypoint-initdb.d来创建新的 Wordpress 安装。这很好用。我真的可以使用一些帮助。我目前正在运行 Debian 10。谢谢。

更新:我仍然有问题。我验证了当我关闭 OpenVPN、删除 docker-compose.override.yml 并删除 localdev 网络时我仍然有同样的问题。我遇到了同样的问题。唯一的区别是 PHPMyAdmin 在“admin@”之后给了我一个不同的 IP 地址,这是预期的。

我使用docker exec -it登录到我的 MySQL 容器。使用我的用户名和密码运行 MySQL CLI 有效。这些表看起来所有数据都是由 docker-entrypoint-initdb.d 导入的。所以问题似乎不在于 docker-entrypoint-initdb.d,而是 wordpress 和 phpmyadmin 服务无法访问数据库。

更新 2:我修复了 MyPHPAdmin。我没有意识到 PMA_USER 和 PMA_PASSWORD 需要匹配 Wordpress 数据库。我还需要 PMA_HOST 来包含端口号:

  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin:4.9.4
    environment:
      PMA_HOST: db:3306
      PMA_USER: wp_username
      PMA_PASSWORD: wp_password
    restart: always
    ports:
      - "8080:80"

我仍然需要 Wordpress 的帮助。

标签: mysqlwordpressdockerdocker-compose

解决方案


推荐阅读