gpt4 book ai didi

docker - 如何保存Docker容器卷文件?

转载 作者:行者123 更新时间:2023-12-02 09:07:36 25 4
gpt4 key购买 nike

我想与主机共享 ~/mydir 目录,但不使用主机文件替换 Docker 容器目录。所以,我有docker-compose.yml

version: '2'
services:
app:
container_name: mono
build: .
volumes:
# save .composer files on host to keep cache warmed up
- '/srv/mono/mydir:/root/mydir'
command: sleep infinity

Dockerfile

#/bin/bash
FROM php:5.6

RUN mkdir /root/mydir && echo '{}' > /root/mydir/myfile.json

VOLUME /root/mydir

目录/srv/mono/mydir为空。它被替换为主机目录。很清楚。

但是如何保留原始文件呢?

例如,它适用于 MySQL Percona 容器:

version: '2'
services:
percona-56:
container_name: percona-56
image: percona/percona-server:5.6
volumes:
- /srv/mysql/percona-56:/var/lib/mysql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'

容器中有原始文件:

$ ll /srv/mysql/percona-56
total 176220
auto.cnf
error.log
ibdata1
ib_logfile0
ib_logfile1
init.ok
mysql
performance_schema

我尝试检查 Percona Dockerfile但没有找到与卷共享相关的内容。

$ docker --version
Docker version 1.12.3, build 6b644ec

最佳答案

当您在 docker run 中添加 VOLUME 时,您所说的是使用主主机文件系统,而不是 Docker 用于镜像的写时复制文件系统。这里有两个主要选项:

  1. 您将实际的文件系统位置绑定(bind)挂载到镜像中。这就是您在这里所做的。
  2. 您让 Docker 处理该位置...在本例中,Docker 在主文件系统上创建该位置,然后将镜像的内容复制到该位置以开始工作。

您希望同时获得两者 - 您希望文件系统上有一个固定位置,但您希望镜像中的文件位于该位置。现在,这种方式行不通是有原因的!如果该文件夹中已存在“auto.conf”并且您启动了容器,会发生什么情况?如果您运行两个容器,其中该文件的不同版本指向同一位置,会发生什么情况?这就是为什么如果您选择一个真实的位置,它不会尝试猜测如何处理图像和文件系统之间的冲突,它只是与文件系统一起。

不过,你可以实现你想要的。实际上有两个选择。更好的方法是让您的应用程序从两个单独的文件夹中读取数据 - 一个位于图像内部,另一个位于您的文件系统上。这完全避免了这个问题;)第二个选项是告诉 Docker 如何处理镜像中的各个文件。

version: '2'
services:
app:
container_name: mono
build: .
volumes:
# save .composer files on host to keep cache warmed up
- '/srv/mono/mydir:/root/mydir'
# Marking a volume this way will tell Docker to use THIS file
# from the image, even though the parent directory is a regular
# volume. If you have an auto.cnf file in your directory, it
# will be ignored.
- /root/mydir/auto.cnf
command: sleep infinity

……

关于docker - 如何保存Docker容器卷文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40491036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com