是否可以在Docker容器启动时将丢失的文件添加到装载卷?

问题描述 投票:0回答:1

我有docker映像,并且目录'A'挂载在主机目录'hostA'中。在目录**hostA**中,有一个文件file0。当我直接在A中构建docker映像时,有一个文件file1。更清楚地说,我将它们显示如下:

In host: 
hostA:
   - file0
In docker container: 
A:
   - file1

[当我使用docker映像启动docker容器时。由于容器启动时目录A已安装在主机目录**hostA**中,并且hostA存在,因此A中的file1将不会出现,尽管它已构建在Docker映像中。相反,file0将在目录A中可用,因为它在hostA

我的问题是是否有办法(在构建docker映像期间或在启动docker容器期间),使文件1在dir A(和主机dir hostA中)也可用。这意味着在容器启动后,它将是

In host: 
hostA:
   - file0
   - file1
In docker container: 
A:
   - file0
   - file1

提前感谢。

docker volume
1个回答
0
投票

不,据我所知。由于Docker卷挂载的工作方式与常规的unix挂载相同,因此您不会在Docker容器中看到该文件。通常,您将那些在容器的生命周期内将更改的目录(例如本地开发期间的源代码)和那些不会更改的目录(例如,使用JavaScript时的node_modules)分开。

我可以为您概述两个接近您所需解决方案并且可能对您有用的想法。

安装到其他目​​录

您可以将容器目录A分为AAABAA包含在构建期间添加的文件,而AB包含要在容器中装入的文件。然后,您可以使用../AB/some_file之类的相对路径从容器中的文件引用已装入的文件。

# /A/AA/file1.js
require '../AB/file0';
In host: 
hostA:
   - file0
In docker container: 
A:
  AA:
    - file1
  AB: # mounted
    - file0

安装单个文件

作为另一种选择,您可以装载单个文件。如果您只需要将几个文件(如配置)装载到容器中,那将是一个有效的解决方案。

Docker:

-v "PWD"/hostA/file0:/A/file0

docker-compose:

somes_service:
  volumes:
    - hostA/file0:/A/file0

仍然,来自容器file1的文件在您的主机上将不可用。

在那种情况下,您也可以将安装的文件设置为只读。

hostA/file0:/A/file1:ro

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.