容器和主机之间的Docker卷共享

时间:2018-08-17 08:56:15

标签: docker docker-compose dockerfile

我正在尝试使用Docker使用debmirror构建本地Ubuntu存储库。我想将下载的文件存储在主机上的./repo目录中

该容器能够将文件下载到我可以通过docker exec <container_id>...确认的容器中,但是文件不会反映在主机的./repo目录中。

$ docker ps 
CONTAINER ID    IMAGE             COMMAND                  CREATED             STATUS            PORTS     NAMES
2338e107050e    21b98483ec19      "/bin/sh -c '/bin/..."   15 minutes ago      Up 15 minutes               admiring_kirch

$ docker exec 2338e107050e ls -lF /repo
total 12
-r--r--r-- 1 root root   15 Aug 17 08:13 Archive-Update-in-Progress-f502fa9e2b7d
drwxr-xr-x 5 root root 4096 Aug 17 08:15 dists/
drwxr-xr-x 3 root root 4096 Aug 17 08:23 pool/

$ ls -lF ./repo/ 
total 0

这些是我的docker-compose.yml配置。

$ cat docker-compose.yml 
version: '2'
services:
    debmirror:
        build: ./app
        container_name: "debmirror"
        volumes:
            - repo:/repo
        stdin_open: true
        tty: true

volumes:
    repo:

这些是我的Dockerfile配置。

$ cat app/Dockerfile 
FROM ubuntu:16.04

ENV http_proxy "http://proxy.example.com:80/"
ENV https_proxy "http://proxy.example.com:80/"

RUN mkdir -p /app/mirrorkeyring \
    && chown -R root:www-data /app \
    && chmod -R 755 /app

RUN mkdir /repo \
    && chown -R root:www-data /repo \
    && chmod -R 571 /repo

VOLUME /repo

RUN apt update && apt install -y debmirror xz-utils
COPY mirrorbuild.sh /app/mirrorbuild.sh
RUN chmod +x /app/mirrorbuild.sh

RUN gpg --no-default-keyring --keyring /app/mirrorkeyring/pubring.gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg
RUN gpg --no-default-keyring --keyring /app/mirrorkeyring/trustedkeys.gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg

RUN /bin/bash -c /app/mirrorbuild.sh

有什么想法为什么在主机的./repo目录中看不到任何文件?

1 个答案:

答案 0 :(得分:0)

按以下所示更改docker的组成使其可在主机的./repo-

version: '2'
services:
    debmirror:
        build: ./app
        container_name: "debmirror"
        volumes:
            - ${PWD}/repo:/repo
        stdin_open: true
        tty: true

基本上,当您在撰写文件中定义卷时,它会创建一个命名卷,您可以通过docker volume ls看到卷数据,该数据保留在主机/var/lib/docker容器卷/数据目录中。使用此功能,您可以在多个容器之间共享相同的数据。

但是,如果要在主机上某个特定文件夹内查看数据,则必须使用主机绑定/挂载卷,如我在上面的撰写文件中所建议的那样。