gpt4 book ai didi

docker - 如何获取由本地文件系统上的Docker容器生成的内容

转载 作者:行者123 更新时间:2023-12-02 18:42:01 31 4
gpt4 key购买 nike

编辑:我不再使用docker,所以我将无法测试该问题的答案
感谢所有的建议!

TL;DR: can you point me to a simple example of an image that writeschanges to a volume shared between the container and the hostfilesystem?


你好
我在理解卷的工作方式时遇到了一些麻烦。
我已经读过 Dockerfile referenceunderstanding volumes
我想做什么
  • 我有一个图像,该图像在RUN上将wordpress的 Composer 安装到/ var / tmp / html
  • 然后启用我使用docker-compose.yml环境变量中的一些信息来对/ var / tmp / html
  • 进行更多操作
  • 作为最后一步,我希望将所有内容都复制到/ var / www / html,并从 Composer (能够运行指向这些文件的apache)和本地文件系统(必须将代码编码到html目录)中进行访问)

  • 我现在有什么
    测试1
    Dockerfile
    docker-compose.yml
    上面的链接是这些文件在github上特定版本的链接。
    这项测试只是安装wordpress的所有步骤,没有任何卷信息
    结果
    扑向图像并列出/ var / www / html
    我得到:
    root@4484ccdb63ca:/var/www/html# ls -al
    total 32
    drwxr-xr-x 6 www-data www-data 4096 Jan 21 11:45 .
    drwxr-xr-x 6 root root 4096 Jan 21 11:45 ..
    -rw-r--r-- 1 www-data www-data 10 Jan 21 10:47 .gitignore
    -rw-r--r-- 1 www-data www-data 138 Jan 21 10:47 composer.json
    -rw-r--r-- 1 www-data www-data 3718 Jan 21 10:47 composer.lock
    -rw-r--r-- 1 www-data www-data 428 Jan 21 10:47 index.php
    drwxr-xr-x 6 www-data www-data 4096 Jan 21 11:45 vendor
    drwxr-xr-x 8 www-data www-data 4096 Jan 21 11:45 wordpress
    这是 ,好的
    并在我得到的本地文件系统上列出./html
    total 0
    drwxr-xr-x 3 miqueladell staff 102 Jan 21 10:33 .
    drwxr-xr-x 11 miqueladell staff 374 Jan 21 13:04 ..
    -rw-r--r-- 1 miqueladell staff 0 Jan 21 10:33 foo
    这是 错误的,但完全可以预期。容器上的文件还可以,但是在容器外没有任何关系,因为我没有提供任何卷信息。
    测试2
    Dockerfile
    docker-compose.yml
    上面的链接是这些文件在github上特定版本的链接。
    在Dockerfile和docker-compose.yml上添加VOLUME
    这是差异的粘贴
    Dockerfile
    - # VOLUME /var/www/html/
    + VOLUME /var/www/html/
    docker-compose.yml
    -  # volumes:
    - # - .html:/var/www/html/
    + volumes:
    + - ./html:/var/www/html/
    生成图像并运行cointainer的结果是,在容器上清空html目录,并且对本地文件系统没有任何更改
    谢谢!
    编辑:我创建了这个问题的最小失败版本: How to get contents generated by a docker container on the local fileystem (minimal failing example)

    最佳答案

    我认为您对运行docker容器时VOLUME中的Dockerfile-v做了什么有一些误解。
    VOLUME和-v之间的根本区别是:-v将在操作系统中将现有文件挂载在Docker容器内,而VOLUME将在主机上创建一个新的空卷(存储在/ var / lib / docker / xxxxx中),将其安装在您的容器中。

    例:

    我们在/ home / test /中有一个文件test-file

    cmckinnel at arch in /home/test
    $ ll
    total 8
    drwxr-xr-x 2 cmckinnel adm 4096 Jan 21 14:40 .
    drwxr-xr-x 4 root root 4096 Jan 21 14:40 ..
    -rw-r--r-- 1 cmckinnel adm 0 Jan 21 14:40 test-file

    我们希望将此目录安装在Docker容器内,因此当我们更改主机上的文件时,该目录也会在容器内更改。

    这是您当前正在执行的操作(在 VOLUME的容器内创建一个空的 /home/test):

    Docker文件
    FROM ubuntu:14.04

    VOLUME /home/test

    构建此镜像并从中运行容器:
    $ docker build -t test-creating-volume .
    $ docker run -ti test-creating-volume bash
    $ cd /home/test
    $ ll
    total 8
    drwxr-xr-x 2 root root 4096 Jan 21 14:41 ./
    drwxr-xr-x 3 root root 4096 Jan 21 14:41 ../

    您实际上想要做的是在 -v时使用 docker run:

    Docker文件
    FROM ubuntu:14.04

    构建此镜像并从中运行容器:
    $ docker build -t test-mounting-volume .
    $ docker run -ti -v /home/test:/home/test test-mounting-volume bash
    $ cd /home/test
    $ ll
    total 8
    drwxr-xr-x 2 1000 adm 4096 Jan 21 14:40 ./
    drwxr-xr-x 3 root root 4096 Jan 21 14:51 ../
    -rw-r--r-- 1 1000 adm 0 Jan 21 14:40 test-file

    编辑

    糟糕,我认为您上面的实际问题是在 volume:文件的 docker-compose.yml声明中没有完整路径。

    例:

    docker-compose.yml(注意 .home不存在)
    test-mounting-volume:
    image: test-mounting-volume:
    volumes:
    - .home:/home/test

    然后:
    $ docker-compose run test-mounting-volume
    $ cd /home/test
    $ ll
    total 8
    drwxr-xr-x 2 root root 4096 Jan 21 15:01 ./
    drwxr-xr-x 3 root root 4096 Jan 21 15:01 ../

    但是,如果您给出完整的路径:

    docker-compose.yml:
    test-mounting-volume:
    image: test-mounting-volume:
    volumes:
    - /home/test:/home/test

    然后:
    $ docker-compose run test-mounting-volume
    $ cd /home/test
    $ ll
    total 8
    drwxr-xr-x 2 root root 4096 Jan 21 15:01 ./
    drwxr-xr-x 3 root root 4096 Jan 21 15:01 ../
    -rw-r--r-- 1 1000 adm 0 Jan 21 14:40 test-file

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

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com