当前位置: 首页 > 知识库问答 >
问题:

mysql - docker-compose.yml文件部署MySQL时出现错误?

狄宾实
2024-01-22

在Ubuntu中通过docker-compose部署MySQL时无法部署;docker-compose.yml文件如下:

version: '3'services:  mysql:     restart: always    image: mysql:8.2    network_mode: bridge    container_name: mysql    environment:      MYSQL_ROOT_PASSWORD: root123    command:      --character-set-server=utf8mb4      --collation-server=utf8mb4_general_ci      --explicit_defaults_for_timestamp=true      --lower_case_table_names=1      --max_allowed_packet=128M    volumes:      - /etc/localtime:/etc/localtime:ro      - /data/docker/mysql/mysql:/var/lib/mysql      - /data/docker/mysql/etc:/etc/mysql:ro    ports:      - 3306:3306

我的步骤如下:
1.注释挂载,直接启动mysql 成功
2.复制容器中的/var/lib/mysql到宿主机我希望挂载的地方
3.复制/etc/mysql ,然后编写my.cnf放到宿主机/data/docker/mysql/etc/mysql/conf.d下
4.删除镜像
5.打开注释
错误如下:

2024-01-21 12:00:35+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.2.0-1.el8 started.2024-01-21 12:00:35+08:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config    command was: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --max_allowed_packet=128M --verbose --help --log-bin-index=/tmp/tmp.5xbHMoySK8    mysqld: Can't read dir of '/etc/mysql/conf.d/' (OS errno 2 - No such file or directory)mysqld: [ERROR] Stopped processing the 'includedir' directive in file /etc/my.cnf at line 36.mysqld: [ERROR] Fatal error in defaults handling. Program aborted!

共有4个答案

漆雕奇
2024-01-22

把这一句- /data/docker/mysql/etc:/etc/mysql:ro
改为- /data/docker/mysql/etc/mysql:/etc/mysql:ro

法烨烨
2024-01-22

如果按照你说的你将 my.cnf 放到 /data/docker/mysql/etc/mysql/conf.d 中的话,你挂载的路径是 /data/docker/mysql/etc:/etc/mysql

等于说你把相对路径 mysql/conf.d 挂载到了容器 /etc/mysql 下面,所以,你如果在容器内要读到 my.cnf 的话,你应该读 /etc/mysql/mysql/conf.d,而不是 /etc/mysql/conf.d/

秦景福
2024-01-22

配置:

      - /data/docker/mysql/etc:/etc/mysql:ro

错误:

mysqld: Can't read dir of '/etc/mysql/conf.d/' (OS errno 2 - No such file or directory)

你的 /data/docker/mysql/etc 里没有 conf.d ,它被挂载到了 /etc/mysql/ ,导致启动的时候找不到 /etc/mysql/conf.d 。

诸俊才
2024-01-22

从你给出的错误信息来看,问题出在MySQL无法读取/etc/mysql/conf.d/目录。这可能是由于你在第3步中,将/etc/mysql复制到了宿主机/data/docker/mysql/etc/mysql,但是并没有复制/etc/mysql/conf.d/目录。

你可以尝试以下步骤来解决这个问题:

  1. 确保在复制/etc/mysql时,也复制了/etc/mysql/conf.d/目录。你可以修改你的docker-compose.yml文件,添加一个额外的卷映射来复制这个目录。
  2. 检查你的MySQL配置文件my.cnf。看起来它在启动时无法找到这个目录。请确保这个配置文件中的路径是正确的。

修改后的docker-compose.yml文件可能如下:

version: '3'services:  mysql:     restart: always    image: mysql:8.2    network_mode: bridge    container_name: mysql    environment:      MYSQL_ROOT_PASSWORD: root123    command:      --character-set-server=utf8mb4      --collation-server=utf8mb4_general_ci      --explicit_defaults_for_timestamp=true      --lower_case_table_names=1      --max_allowed_packet=128M    volumes:      - /etc/localtime:/etc/localtime:ro      - /data/docker/mysql/mysql:/var/lib/mysql      - /data/docker/mysql/etc:/etc/mysql:ro      - /data/docker/mysql/etc/mysql/conf.d:/etc/mysql/conf.d:ro  # 添加这一行来映射conf.d目录    ports:      - 3306:3306

请注意,这只是一个可能的解决方案,具体的情况可能会根据你的环境有所不同。如果问题仍然存在,你可能需要进一步检查你的配置和环境设置。

 类似资料:
  • 使用docker-compose 部署 MySQL 报错 docker-compose.yml mysql配置部分 my.cnf文件

  • 数据库为:MSSQL 2008 R2 OS=Windows Server 2008 R2 错误日志为: 2014年3月12日下午5:19:53 org.apache.catalina.realm.UserDatabaseRealm开始内部严重:异常查找键UserDatabase javax.naming.NameNotFoundException:Name[UserDatabase]下的UserD

  • 我的docker-compose.yml文件中有关mysql服务的配置如下,我想将/app/mysql/conf/mycnf/my.cnf挂载与/etc/my.cnf想对应,但是这里在volumes:下配置相当于目录了,不是文件,该怎么弄才能让文件相对应?

  • 当我试图将包含一个简单的streamlit应用程序的Docker映像部署到Heroku时,我遇到了一些初期问题。我的问题是,部署后我无法访问我的Docker。经过仔细观察,我发现了以下错误: 错误R10(启动超时)- 我研究并了解到这是因为端口不可用,因为Heroku将动态分配端口号。 我在Dockerfile中添加了以下内容,以确保不会发生这种情况。 我现在可以看到网络URL和外部URL端口号是

  • 我已经将Shopizer war文件部署到Tomcat Elastic Beanstalk实例。我已经配置了一个mySQL数据库,据我所知,一切都应该是正确的。问题是当我尝试访问URL时,我收到了502错误。我知道Elastic Beanstalk在60后超时,所以我增加了超时限制,但仍然遇到了问题。 我在我的Catalina.out日志中注意到了这一点。我知道这只是一个警告,但它可能指向我的问题

  • 我使用下面的命令来运行我的项目。 mvn清洁安装 我使用以下命令创建了一个数据库 创建数据库密钥斗篷;将keydeave.*上的所有特权授予“keydeave”@“%”; 我使用下面的命令创建了一个docker映像,并创建了一个映像。 码头工人建造-t钥匙斗篷。 当我使用Docker运行时, docker run-p 8080:8080-e DB_VENDOR=MYSQL-e DB_ADDR=19