mysql - 无法使用 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 的帮助。
解决方案
推荐阅读
- sim-card - 我们可以重新编程网络运营商提供的 SIM 卡吗?
- c++ - C++ IO 运算符中的左关联性和优先级
- monaco-editor - 在 Monaco 编辑器中,如何从 IEditor 界面获取选定的文本
- python - 如何将 3D 数组的内积变为 2D 数组?
- javascript - JavaScript中的ispalindrome递归函数
- spring - 如何在 Spring Boot 中使用 MultipartFile 加载本地文件
- javascript - 在某些元素上从内部 for 循环重新开始编号
- entity-framework-core - OData V4.01 和 EF Core - 选择集合类型的属性时出错
- apachebench - 从jenkins运行apache基准测试时出错?
- python - 模块'__main__'在jupyter中没有属性'__spec__'