Docker 挂载卷以方便开发

问题描述 投票:0回答:0

我在 Windows Enterprise 11 主机上使用 Docker Desktop 将 java 源文件从主机复制到 docker 映像;然后,我想在容器中运行该映像,其中可以在已安装的主机目录(卷)中提供(并保留)映像中的 java 源文件,这是超级简单的用例,但它不起作用。

  1. Dockerfile 创建“code-in-container”目录(用于映像),并将 java 源文件和子目录从“code-on-host”(本地主机)复制到“code-in-container”(在主机上) image),文本文件也被复制到“code-in-container”,该镜像是基于 Linux Alpine 基础镜像构建的。

    FROM alpine:latest
    RUN mkdir -p /code-in-container
    COPY /code-on-host /code-in-container/
    COPY file-on-host.txt /code-in-container
    
  2. docker-compose 基于引用的 Dockerfile(如上所述)创建一个服务,设置从主机 -> 容器的端口转发,然后创建一个名为“some-host-directory”的绑定挂载(其中 ./ 提供应在主机上创建“some-host-directory”的上下文,这是基于 compose-file 和 Dockerfile 的托管位置),然后 compose-file 将绑定挂载映射到“/code-in-正在运行的容器(图像)中的“container”目录。 stdin_open 和 tty 用于保持容器运行,以便可以建立挂载,并且我可以访问正在运行的容器的 shell。

主机目录

version: '3'
services:
  my_app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3001:3001"
    volumes:
      - ./some-host-directory:/code-in-container
    stdin_open: true
    tty: true

我使用

docker compose up -d
构建映像并在 docker 容器中运行它,“主机上的代码”包含源文件和子目录,但是,当构建映像并运行“某些主机目录”时并且“容器中的代码”目录为空。

当我仅使用 构建 docker 映像时

docker build -t my-dev-image:1.0 .

(使用终端中当前文件夹中的 Dockerfile),然后使用

运行图像
docker run -d my-dev-image:1.0

我添加了

CMD ["tail", "-f", "/dev/null"]
以保持容器在运行时保持运行,然后,当我使用

访问正在运行的容器 shell 时,我可以看到容器中可用的“code-in-container”目录
docker exec -it <container_id/bin/sh> /bin/sh

任何人都可以帮助解释当我运行“docker检查”时我缺少什么吗我在“安装”部分看到以下内容:

    "Mounts": [
        {
            "Type": "bind",
            "Source": "C:\\PathTo\\Host\\Directory\\code-on-host",
            "Destination": "/code-in-container",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],

但我没有看到对“类型”:“卷”的引用,不确定这是否重要,但希望存在卷引用。

干杯。

我尝试从 Dockerfile 构建镜像并在 Docker Desktop 中运行该镜像,我尝试使用 docker-compose 构建镜像并将镜像目录安装到在 docker-compose 文件中指定为卷的主机目录。一切再次无济于事。我想知道挑战是否是因为图像是在本地构建和使用的,并且它应该位于 docker 图像存储库中并从 docker-compose 文件以这种方式访问。我还尝试使用 Windows Linux 子系统生成映像并使用 docker-compose 文件运行它。

docker bind mount volumes
© www.soinside.com 2019 - 2024. All rights reserved.