无法让MySQL 5.7与Docker Compose配合工作

80次阅读
没有评论

问题描述

在配置一个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数据库可能会解决问题。

  1. 停止并移除当前的Docker容器:
    sh
    docker-compose down

  2. 删除已存在的MySQL数据文件夹:
    sh
    rm -rf ./tmp/db

  3. 重新启动Docker容器:
    sh
    docker-compose up -d

解决方案2:检查MySQL容器状态

如果重新初始化数据库没有解决问题,您可以检查MySQL容器的状态和日志,以获取更多信息。

  1. 查看MySQL容器的运行状态和日志:
    sh
    docker-compose ps
    docker-compose logs db

  2. 如果日志中有错误信息,请根据错误信息采取相应的措施。例如,可能会有关于数据目录权限、环境变量设置等方面的问题。

解决方案3:检查Ubuntu 19的兼容性

尽管大多数Docker容器在不同的Linux发行版上都可以正常运行,但有时特定的发行版可能会导致一些问题。您可以查看MySQL官方镜像的文档,确认它是否与Ubuntu 19兼容。

解决方案4:升级Docker和Docker Compose

确保您正在使用最新版本的Docker和Docker Compose,以避免与已知问题相关的旧版本问题。

请注意,以上解决方案基于您提供的问题描述。如果问题仍然存在,您可能需要更多的调查和排除步骤,以确定根本原因并解决问题。

希望这些解决方案能够帮助您解决MySQL与Docker Compose配合使用的问题。如果您遇到任何其他问题或需要进一步的帮助,请随时提问。

正文完