gpt4 book ai didi

volume - Docker Volumes - 自动添加文件

转载 作者:IT老高 更新时间:2023-10-28 21:22:22 37 4
gpt4 key购买 nike

我正在尝试创建一个 docker 容器,该容器具有一个应包含多个文件夹的外部卷,因此我的 Dockerfile 简化版本如下所示:

FROM ubuntu:12.04

# Create a volume for externally stored data that will persist across containers.
VOLUME ["/uploads"]

# Add the subfolders we need if they dont already exist
# however this never works.
RUN mkdir /uploads/folder1
RUN mkdir /uploads/folder2

每当我使用

启动容器时
sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash

/uploads 文件夹不包含文件夹 1 或文件夹 2。但是,如果我用 RUN mkdir/uploads 替换 VOLUME 上传行,它确实可以使用此命令

sudo docker run -i -t [IMAGE ID] /bin/bash

但不使用此命令(文件夹再次丢失):

sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash

如何设置 dockerfile,以便在运行容器时将文件/文件夹自动添加到主机挂载目录中?

最佳答案

How can I set up the dockerfile so that files/folders will automatically get added to the hosts mounted directory upon running the container?

你没有。 Dockerfile 用于创建镜像,设置镜像内容。您可以直接在 shell 中设置 挂载目录 的内容:

# create folders:
mkdir /uploads123
mkdir /uploads123/folder1
mkdir /uploads123/folder2

# run container
docker run -i -t -v /uploads123:/uploads [IMAGE ID] /bin/bash

# for this trivial case, you can use directly ubuntu image,
# it works, no need for Dockerfile

或者,您可以在启动主进程之前设置一些设置脚本以在容器中运行。此设置脚本可以使用必要的文件夹填充已安装的卷。

为了解释这种行为 - 您的命令 RUN mkdir/uploads/folder1 确实在图像中创建了文件夹,但是您 shadow 安装了卷的文件夹,所以您这样做了看不到这个文件夹(文件夹在图像中,不在主机文件夹中)。您不能在 Dockerfile 中的卷上创建文件夹,因为卷是稍后在运行时挂载的(容器)。

关于volume - Docker Volumes - 自动添加文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23131687/

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