首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据在Docker容器+命名卷中可见,尽管它不应该可见

数据在Docker容器+命名卷中可见,尽管它不应该可见
EN

Stack Overflow用户
提问于 2021-10-21 09:41:37
回答 2查看 31关注 0票数 0

我可能只是在这里愚蠢,但我认为这不应该工作,但它确实如此,我不明白为什么。在构建期间,我将测试文件复制到Docker镜像中的/var/www,然后在/var/www上挂载一个命名卷,但我仍然可以看到这些文件。

代码语言:javascript
复制
~/test$ tree
.
├── docker
│   ├── data
│   │   └── Dockerfile
│   └── docker-compose.yml
└── src
    ├── testfile1
    └── testfile2

3 directories, 4 files

./docker/docker-compose.yml

代码语言:javascript
复制
version: '3'
services:
  test-data:
    container_name: test-data
    build:
      context: ..
      dockerfile: ./docker/data/Dockerfile
    volumes:
      - test-data:/var/www
volumes:
  test-data:
    name: test-data

./docker/data/Dockerfile

代码语言:javascript
复制
FROM alpine

COPY src/ /var/www/

CMD sleep infinity

据我所知,卷在构建时不可用,当容器启动时,它也应该覆盖/隐藏挂载在/var/www上的文件,但它不是这样吗?

代码语言:javascript
复制
~/test$ docker inspect -f '{{ .Mounts }}' test-data
[{volume test-data /var/lib/docker/volumes/test-data/_data /var/www local rw true }]

~/test$ docker exec test-data ls -l /var/www
-rw-r--r--    1 root     root             0 Oct 21 09:01 testfile1
-rw-r--r--    1 root     root             0 Oct 21 09:01 testfile2

在Windows + WSL2 Ubuntu20.04上运行Docker Destop3.6.0

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-21 10:36:00

第一次(仅)将名为volume (仅限)的Docker附加到容器时,Docker会将文件从底层镜像复制到卷中。在此初始拷贝之后,卷内容永远不会更新。这种复制也不会发生在主机目录绑定挂载、Kubernetes或其他非Docker环境中。

你会从两个方面看到你期望的行为。首先,如果将volumes:更改为绑定挂载

代码语言:javascript
复制
volumes:
  - ./local-empty-directory:/var/www

您将看到这将按照您期望的方式替换图像内容。您可以更改的另一件事是运行一次现有安装程序,更改映像的内容,然后再次运行它

代码语言:javascript
复制
docker-compose build
docker-compose run --rm test-data ls -l /var/www
touch src/testfile3
docker-compose build
docker-compose run --rm test-data ls -l /var/www
# testfile3 isn't in the volume and won't be in this listing

由于其局限性,我倾向于不建议实际依赖于"Docker将文件复制到卷中“的行为。有几个使用它的常见模式,但当卷从未更新或设置不能在不同的容器运行时运行时,它们会感到惊讶。

票数 0
EN

Stack Overflow用户

发布于 2021-10-21 10:11:41

Docker卷独立于您的镜像/容器存在。如果运行docker volume ls,您将看到您的卷,这是数据所在的位置,并在运行时挂载到容器中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69659562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档