如何从docker中的卷映射opt复制到图像opt文件夹?
假设我有一个码头工人的形象如何从docker中的卷映射opt复制到图像opt文件夹?,docker,Docker,假设我有一个码头工人的形象 FROM openjdk:8-jdk-slim WORKDIR /opt COPY localfile ../imagefile 我可以创建我的docker映像docker build-t我的映像。并将我的本地localfile映像设置为。/imagefile 我也可以通过 Rundocker Run-it--name my container--volume=$(pwd):/opt--workdir=/opt openjdk:8-jdk-slim 然后cp loc
FROM openjdk:8-jdk-slim
WORKDIR /opt
COPY localfile ../imagefile
我可以创建我的docker映像docker build-t我的映像。
并将我的本地localfile
映像设置为。/imagefile
我也可以通过
docker Run-it--name my container--volume=$(pwd):/opt--workdir=/opt openjdk:8-jdk-slim
cp localfile../imagefile
docker commit my container my image
my image
但是,如果我将Dockerfile更改为下面的
FROM openjdk:8-jdk-slim
WORKDIR /opt
COPY localfile imagefile
我可以使用docker build-t my image构建映像。
。但是,我无法cp localfile imagefile
,因为cp
只会将文件复制到映射到opt
文件夹的原始磁盘卷文件夹,而不会复制到实际的图像opt
文件夹
当我的opt
映射到本地文件夹时,是否还有办法将我的文件复制到imageopt
文件夹(而不是本地文件夹)
或者另一种提问方式,当我以交互方式运行容器以创建图像时,是否可以使用等效的
COPY
命令?关于这个问题,有两个重要的细节:
docker commit
将创建容器文件系统的映像,忽略卷,这样就会看到这一点。不过,使用docker commit
并不是一个真正的最佳实践;如您所示,通过dockerfile构建映像和使用docker build
几乎总是首选。)
一般来说,我发现卷装载在三个方面很有用,其中隐藏容器内容是可以接受的,甚至是预期的。您可以使用mounts将配置文件注入容器(您希望在其中覆盖映像的副本)。您可以使用挂载将日志文件读回(您不关心映像以什么开头)。如果您有一个有状态的工作负载,比如数据库,那么您可以使用挂载来保存需要持久化的数据(这样它就在容器文件系统之外)。我想您是在问如何将文件从本地复制到容器?如果是这样,您可以使用docker cp。文档可以在这里找到。我无法交互使用
docker cp
。我对您的工作流程有点困惑。如果你正在用更新的文件重建你的图像(一个好主意),为什么你要在上面挂载内容;如果您要在其上装载内容,为什么需要将文件复制到容器文件系统空间中的其他位置?您提出了一个好问题@DavidMaze。我可以将它映射到容器中不存在的文件夹,这将解决整个问题。我只是好奇,如果我将它映射到容器中已经存在的文件夹,我想知道是否有方法将我拥有的内容从本地文件夹移动到容器原始文件夹(例如opt)。主要是为了了解这种功能是否存在或不受支持;无法查看您与卷一起隐藏的容器文件系统。唯一的例外是docker commit
,使用它从来都不是最佳实践。