docker - 如何获取由本地文件系统上的Docker容器生成的内容(最小失败示例)

标签 docker filesystems dockerfile docker-compose

这个问题是另一个问题的最低失败版本:

How to get contents generated by a docker container on the local fileystem

我有以下文件:

./test
-rw-r--r--   1 miqueladell  staff   114 Jan 21 15:24 Dockerfile
-rw-r--r--   1 miqueladell  staff    90 Jan 21 15:23 docker-compose.yml
drwxr-xr-x   3 miqueladell  staff   102 Jan 21 15:25 html

./test/html:
-rw-r--r--  1 miqueladell  staff    0 Jan 21 15:22 file_from_local_filesystem

DockerFile的
FROM php:7.0.2-apache
RUN touch /var/www/html/file_generated_inside_the_container
VOLUME /var/www/html/

docker-compose.yml
test:
  image: test
  volumes:
     - ./html:/var/www/html/

运行根据Dockerfile中定义的镜像构建的容器后,我想要的是:
./html
-- file_from_local_filesystem
-- file_generated_inside_the_container

代替此,我得到以下信息:

建立图片
$ docker build --no-cache -t test .

Sending build context to Docker daemon 4.096 kB
Step 1 : FROM php:7.0.2-apache
 ---> 2f16964f48ba
Step 2 : RUN touch /var/www/html/file_generated_inside_the_container
 ---> Running in b957cc9d7345
 ---> 5579d3a2d3b2
Removing intermediate container b957cc9d7345
Step 3 : VOLUME /var/www/html/
 ---> Running in 6722ddba76cc
 ---> 4408967d2a98
Removing intermediate container 6722ddba76cc
Successfully built 4408967d2a98

使用先前的图像运行容器
$ docker-compose up -d

Creating test_test_1

列出本地计算机文件系统上的文件
$ ls -al html

total 0
drwxr-xr-x  3 miqueladell  staff  102 Jan 21 15:25 .
drwxr-xr-x  5 miqueladell  staff  170 Jan 21 14:20 ..
-rw-r--r--  1 miqueladell  staff    0 Jan 21 15:22 file_from_local_filesystem

列出容器中的文件
$ docker exec -i -t test_test_1 ls -alR /var/www/html


/var/www/html:
total 4
drwxr-xr-x 1 1000 staff  102 Jan 21 14:25 .
drwxr-xr-x 4 root root  4096 Jan  7 18:05 ..
-rw-r--r-- 1 1000 staff    0 Jan 21 14:22 file_from_local_filesystem

来自本地文件系统的卷被挂载在容器文件系统上,以替换其内容。

这与本指南Understanding volumes的“权限和所有权”部分中所了解的相反

如何获得所需的输出?

谢谢

编辑:如所接受的答案所述,当我问问题时,我听不懂音量。卷作为mountponint,将容器内容替换为已安装的本地文件系统。

我需要的解决方案是在容器运行后,使用ENTRYPOINT运行必要的命令来初始化已安装卷的内容。

可以在这里看到产生该问题的代码:
https://github.com/MiquelAdell/composed_wordpress/tree/1.0.0

最佳答案

这是来自您所指的指南

This won’t happen if you specify a host directory for the volume



您从其他容器或主机文件系统共享的卷将替换容器中的目录。

如果需要将一些文件添加到卷中,则应在启动容器后执行此操作。例如,您可以创建一个入口点,该入口点将执行touch,然后运行您的主进程。

关于docker - 如何获取由本地文件系统上的Docker容器生成的内容(最小失败示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34926906/

相关文章:

docker - Docker容器与Kubernetes Pod之间的通信

docker - 如何 docker 化 Jupyter 实验室

c# - 如何在文件不再打开时立即收到通知?

windows - 有没有办法在文件系统上伪造文件或编写一个只对我的 EXE 文件可见的文件

spring-boot - 使用参数运行Docker镜像

bash - 每个 Dockerfile RUN 调用中的源

docker - 是否可以查看docker swarm内部DNS记录?

amazon-web-services - 具有指向文件的 Docker 卷的 Elastic beanstalk

c - 文件路径重定向

sonarqube - Dockerfiles 的静态代码分析?