如何将Docker卷移动到磁盘位置?

问题描述

我有一个MySQL docker image在Ubuntu VPS的docker容器中运行。我通过以下docker-compose up -d文件使用docker-composer.yml命令启动MysqL

version: "3"
services:

    MysqL_server:
        image: MysqL:8.0.21
        restart: always
        container_name: MysqL_server
        environment:
            MysqL_DATABASE: db_name
            MysqL_USER: db_username
            MysqL_PASSWORD: db_password
            MysqL_ROOT_PASSWORD: root_password
        volumes:
            - MysqL_server_data:/var/lib/MysqL
            - /MysqL/files/conf.d:/etc/MysqL/conf.d

我遇到一些性能问题,并且想做以下事情来尝试改善性能

  1. 我希望将MysqL_server_data卷中的数据挂载到/MysqL/data上,而不会丢失任何数据,因为此实例在生产中正在运行。

  2. 我还想在/MysqL/files上安装MysqL配置文件,以便更改实例配置以提高性能

问题

如何将卷的数据位置从MysqL_server_data更改为/MysqL/data

此外,如何在/MysqL/files/conf.d上安装MysqL配置文件以允许我更新设置?

我试图像这样挂载配置文件

        volumes:
            - /MysqL/files/conf.d:/etc/MysqL/conf.d

但是这创建了一个目录/MysqL/files/conf.d,没有配置文件

解决方法

要移动数据: 使用docker-compose关闭容器,然后在本地文件系统上,将数据从mysql_server_data复制到/ mysql / data。然后更改撰写文件以反映新位置。最后,使用docker-compose up重启容器。

要安装配置文件,请按照MySQL的docker hub文档,如果/my/custom/config-file.cnf是自定义配置文件的路径和名称,则您的卷映射为:

/my/custom:/etc/mysql/conf.d

请注意,将卷映射到容器不会将容器中的数据带到本地,而是将数据带到本地。因此,如果要将文件保存在容器中,则必须首先在本地创建文件。