问题描述
在配置一个Docker Compose文件时,第一步是配置MySQL服务(以便在其应用服务中使用),但无论如何,他都无法进入MySQL容器,即使他设置了所有的环境变量。以下是他的docker-compose.yml
文件的内容:
version: "3.3"
services:
db:
image: mysql:5.7
volumes:
- ./tmp/db:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
尝试了多种配置,但没有一种可以正常工作。如果他使用docker exec -it ${CONTAINER_NUMBER} bash
进入容器,然后尝试访问MySQL,将始终返回:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
或者如果尝试使用用户wordpress
:
ERROR 1045 (28000): Access denied for user 'wordpress'@'localhost' (using password: YES)
他怀疑镜像可能存在问题。他的操作系统是Ubuntu 19。
解决方案
以下方案基于提供的信息,可能涉及版本差异或特定环境,使用前请确保备份数据。
解决方案1:重新初始化MySQL数据库
根据用户的描述,问题可能出在先前的MySQL文件系统中已经初始化了数据库。根据MySQL的官方镜像文档,如果启动容器时已经存在数据库,那么环境变量不会起作用。因此,尝试重新初始化MySQL数据库可能会解决问题。
-
停止并移除当前的Docker容器:
sh
docker-compose down -
删除已存在的MySQL数据文件夹:
sh
rm -rf ./tmp/db -
重新启动Docker容器:
sh
docker-compose up -d
解决方案2:检查MySQL容器状态
如果重新初始化数据库没有解决问题,您可以检查MySQL容器的状态和日志,以获取更多信息。
-
查看MySQL容器的运行状态和日志:
sh
docker-compose ps
docker-compose logs db -
如果日志中有错误信息,请根据错误信息采取相应的措施。例如,可能会有关于数据目录权限、环境变量设置等方面的问题。
解决方案3:检查Ubuntu 19的兼容性
尽管大多数Docker容器在不同的Linux发行版上都可以正常运行,但有时特定的发行版可能会导致一些问题。您可以查看MySQL官方镜像的文档,确认它是否与Ubuntu 19兼容。
解决方案4:升级Docker和Docker Compose
确保您正在使用最新版本的Docker和Docker Compose,以避免与已知问题相关的旧版本问题。
请注意,以上解决方案基于您提供的问题描述。如果问题仍然存在,您可能需要更多的调查和排除步骤,以确定根本原因并解决问题。
希望这些解决方案能够帮助您解决MySQL与Docker Compose配合使用的问题。如果您遇到任何其他问题或需要进一步的帮助,请随时提问。