如何使用 mysql 图像创建 docker-compose 文件以将所有数据保存在卷内
How to create docker-compose file with mysql image to save all data inside volume
我正在尝试为我的 Spring 启动应用程序编写 docker-compose 文件,以便将此应用程序部署到另一台电脑上。
这是我的 docker-compose 文件。
version: "3.7"
services:
db:
image: messor2000/mysql
ports:
- "3308:3306"
environment:
MYSQL_DATABASE: web_library
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
volumes:
- /var/lib/docker/volumes/e24e69d7db152cea837b440ff02baa627d9d3e44ff9ad4c6ca3e6d1ac09f6a4e/_data
它几乎按照我想要的方式工作。我在另一台电脑上写了 docker-compose up 命令,我的容器正在启动(我的 bd 和里面的所有表),但是表中的数据没有传输。据我所知,我的 mysql 表中的数据显示必须按卷规定:,如果这是正确的,请告知如何正确拼写 let 到我的数据。在我的情况下,我的容器安装中有这样的配置:
"Mounts": [
{
"Type": "volume",
"Name": "e24e69d7db152cea837b440ff02baa627d9d3e44ff9ad4c6ca3e6d1ac09f6a4e",
"Source": "/var/lib/docker/volumes/e24e69d7db152cea837b440ff02baa627d9d3e44ff9ad4c6ca3e6d1ac09f6a4e/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
所以通过路径显示我写入我的 docker 撰写文件,来解决我的问题?
我也试着写成卷:-/var/lib/mysql
非常感谢
您几乎不应该直接引用 /var/lib/docker
中的路径。这些是 Docker 管理的文件系统的一部分,确切的路径和文件系统内容可能会在 Docker 版本之间发生变化。
如果您试图将数据库数据从一台机器直接移植到另一台机器,您可以使用 bind mount 将数据直接存储在主机目录中。这会使您面临一些潜在的权限问题,并且在某些主机操作系统上速度可能较慢,但在其他方面非常简单。
version: '3.8'
services:
db:
# user: 1000 # result of `id -u`, may be needed to give R/W access
volumes:
- ./dbdata:/var/lib/mysql
# ^^ host system relative path
here$ docker-compose down
here$ tar cvf myapp.tar docker-compose.yml dbdata
here$ scp myapp.tar there:
here$ ssh there
there$ tar xzf myapp.tar
there$ docker-compose up -d
您还可以使用 Docker named volume, in which case Docker manages the storage for you. While the Docker documentation is extremely enthusiastic about named volumes, tasks like backing up and restoring 命名卷需要临时容器的复杂步骤。
version: '3.8'
services:
db:
volumes:
- dbdata:/var/lib/mysql
# ^^^^^^ no slashes; matches top-level volumes: block
volumes:
dbdata:
here$ docker-compose down
here$ docker-compose run -w /var/lib/mysql db \
> tar cf - . \
> > dbdata.tar
here$ scp docker-compose.yml dbdata.tar there:
here$ ssh there
there$ docker-compose run -w /var/lib/mysql db \
> tar xf - . \
> < dbdata.tar
there$ docker-compose up -d
在这两种情况下,请注意我们完全忽略了 /var/lib/docker
目录。另请注意,volumes:
挂载明确地将容器中的 /var/lib/mysql
目录命名为挂载点。
我正在尝试为我的 Spring 启动应用程序编写 docker-compose 文件,以便将此应用程序部署到另一台电脑上。 这是我的 docker-compose 文件。
version: "3.7"
services:
db:
image: messor2000/mysql
ports:
- "3308:3306"
environment:
MYSQL_DATABASE: web_library
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
volumes:
- /var/lib/docker/volumes/e24e69d7db152cea837b440ff02baa627d9d3e44ff9ad4c6ca3e6d1ac09f6a4e/_data
它几乎按照我想要的方式工作。我在另一台电脑上写了 docker-compose up 命令,我的容器正在启动(我的 bd 和里面的所有表),但是表中的数据没有传输。据我所知,我的 mysql 表中的数据显示必须按卷规定:,如果这是正确的,请告知如何正确拼写 let 到我的数据。在我的情况下,我的容器安装中有这样的配置:
"Mounts": [
{
"Type": "volume",
"Name": "e24e69d7db152cea837b440ff02baa627d9d3e44ff9ad4c6ca3e6d1ac09f6a4e",
"Source": "/var/lib/docker/volumes/e24e69d7db152cea837b440ff02baa627d9d3e44ff9ad4c6ca3e6d1ac09f6a4e/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
所以通过路径显示我写入我的 docker 撰写文件,来解决我的问题? 我也试着写成卷:-/var/lib/mysql 非常感谢
您几乎不应该直接引用 /var/lib/docker
中的路径。这些是 Docker 管理的文件系统的一部分,确切的路径和文件系统内容可能会在 Docker 版本之间发生变化。
如果您试图将数据库数据从一台机器直接移植到另一台机器,您可以使用 bind mount 将数据直接存储在主机目录中。这会使您面临一些潜在的权限问题,并且在某些主机操作系统上速度可能较慢,但在其他方面非常简单。
version: '3.8'
services:
db:
# user: 1000 # result of `id -u`, may be needed to give R/W access
volumes:
- ./dbdata:/var/lib/mysql
# ^^ host system relative path
here$ docker-compose down
here$ tar cvf myapp.tar docker-compose.yml dbdata
here$ scp myapp.tar there:
here$ ssh there
there$ tar xzf myapp.tar
there$ docker-compose up -d
您还可以使用 Docker named volume, in which case Docker manages the storage for you. While the Docker documentation is extremely enthusiastic about named volumes, tasks like backing up and restoring 命名卷需要临时容器的复杂步骤。
version: '3.8'
services:
db:
volumes:
- dbdata:/var/lib/mysql
# ^^^^^^ no slashes; matches top-level volumes: block
volumes:
dbdata:
here$ docker-compose down
here$ docker-compose run -w /var/lib/mysql db \
> tar cf - . \
> > dbdata.tar
here$ scp docker-compose.yml dbdata.tar there:
here$ ssh there
there$ docker-compose run -w /var/lib/mysql db \
> tar xf - . \
> < dbdata.tar
there$ docker-compose up -d
在这两种情况下,请注意我们完全忽略了 /var/lib/docker
目录。另请注意,volumes:
挂载明确地将容器中的 /var/lib/mysql
目录命名为挂载点。