如何获取由本地文件系统上的Docker容器生成的内容(最小失败示例)
这个问题是另一个最小的失败版本:
如何获取由本地文件系统上的Docker容器生成的内容
我有以下文件:
./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/
泊坞窗,compose.yml
test: image: test volumes: - ./html:/var/www/html/
从Dockerfile中定义的映像运行一个容器后,我想要的是:
./html -- file_from_local_filesystem -- file_generated_inside_the_container
取而代之,我得到以下内容:
build立形象
$ 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
来自本地文件系统的卷被装载在容器文件系统上,replace它的内容。
这与我在本指南“权限和所有权”部分理解的内容相反
我怎么能得到所需的输出?
谢谢
编辑:正如在接受的答案中所说,我不明白卷时问这个问题。 卷,作为mountponint,用所装载的本地文件系统replace容器内容。
我需要的解决scheme是使用ENTRYPOINT来运行必要的命令,以便在容器运行时初始化安装的卷的内容。
源代码的代码可以在这里看到: https : //github.com/MiquelAdell/composed_wordpress/tree/1.0.0
这是你指出的指南
如果您为卷指定主机目录,则不会发生这种情况
您从其他容器或主机文件系统共享的卷将replace容器中的目录。
如果您需要添加一些文件到音量,您应该在启动容器后执行此操作。 你可以做一个入口点,例如touch
,然后运行你的主进程。
是的,很确定它应该是完整的path:
泊坞窗,compose.yml
test: image: test volumes: - ./html:/var/www/html/
./html
应该是/path/to/html
编辑
更改为完整path并运行test.sh
后输出:
$ docker exec -ti dockervolumetest_test_1 bash root@c0bd7a722b63:/var/www/html# ls -la total 8 drwxr-xr-x 2 1000 adm 4096 Jan 21 15:19 . drwxr-xr-x 3 root root 4096 Jan 7 18:05 .. -rw-r--r-- 1 1000 adm 0 Jan 21 15:19 file_from_local_filesystem
编辑2
对不起,我误解了问题的整个前提:)
所以你试图把file_generated_inside_the_container
(只在你的file_generated_inside_the_container
中创build)挂载到主机上的某个位置,就像“反向挂载”一样。
这对任何docker命令来说都是不可能的,但是如果你只是在主机上访问你的VOLUME
文件,你可以在docker根目录(通常是/var/lib/docker
)中find这些文件。 要find文件的确切位置,可以使用docker inspect [container_id]
,或者在最新版本中使用docker API。
有关更多详细信息,请参阅cpuguy在此github问题中的答案: https : //github.com/docker/docker/issues/12853#issuecomment-123953258 。