繁体   English   中英

Docker 卷未安装在容器中

[英]Docker volume not being mounted in container

我正在尝试使用 docker-compose 安装卷,以便在开发时可以热重载一些 C 代码。 我之前使用过 Docker 几次,并且在处理 nodejs 网站时专门遇到了这个用例,但我在这里完全不知所措。

我的docker-compose.ymlDockerfile已被完全剥离到最低限度。 我想将当前目录(所有源代码)挂载到容器中。 我的Dockerfile只是安装了一些依赖项,设置了工作目录,然后尝试运行 makefile 而我的docker-compose.yml添加了卷。 结果是一个容器无法访问已安装的卷和生成的代码(Makefile 没有问题,因为它在主机目录上工作并且在复制时,而不是使用卷)。 有没有人发现这两个文件有什么问题? 似乎/cfs文件夹甚至没有在容器中创建。 我尝试将其安装到主目录无济于事。

docker-compose.yml

version: '3'

services:
  cfs:
    volumes:
      - ./:/cfs
    build:
        context: ./
        dockerfile: ./Dockerfile
    networks:
      - default
  
networks:
  default:
    internal: true    

Dockerfile

FROM ubuntu:20.04

# install dependencies
RUN apt-get -qy update                           \
    && apt-get -y install                        \
        cmake=3.16.3-1ubuntu1                    \
        make=4.2.1-1.2                           \
        gcc=4:9.3.0-1ubuntu2                     \
        g++=4:9.3.0-1ubuntu2

WORKDIR /cfs

RUN make prep
RUN make
RUN make install

大多数 Compose 设置在映像构建期间不可见。 volumes:未安装, environment:未设置变量, networks:不可访问。 只有立即build:块中的设置才有效。

这意味着您应该单独查看 Dockerfile,忽略docker-compose.yml文件。 此时, /cfs目录为空(您无需将任何源代码COPY到其中),因此RUN make...命令将失败。 目录最终会在其上安装其他东西并不重要。

如果您只是打算在源代码更改时重新编译应用程序,请删除volumes: ,将源代码COPY到映像中,然后在您通常运行make的位置运行docker-compose build 如果您确实有可以在源更改时重建应用程序的设置,则需要设置映像的CMD以启动该应用程序,但如果您不COPY源代码,则无法在映像构建时构建它。 (......如果你要用一个卷覆盖图像的整个有趣内容,它无论如何都会丢失。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM