[英]Docker volume not being mounted in container
我正在尝试使用 docker-compose 安装卷,以便在开发时可以热重载一些 C 代码。 我之前使用过 Docker 几次,并且在处理 nodejs 网站时专门遇到了这个用例,但我在这里完全不知所措。
我的docker-compose.yml
和Dockerfile
已被完全剥离到最低限度。 我想将当前目录(所有源代码)挂载到容器中。 我的Dockerfile
只是安装了一些依赖项,设置了工作目录,然后尝试运行 makefile 而我的docker-compose.yml
添加了卷。 结果是一个容器无法访问已安装的卷和生成的代码(Makefile 没有问题,因为它在主机目录上工作并且在复制时,而不是使用卷)。 有没有人发现这两个文件有什么问题? 似乎/cfs
文件夹甚至没有在容器中创建。 我尝试将其安装到主目录无济于事。
version: '3'
services:
cfs:
volumes:
- ./:/cfs
build:
context: ./
dockerfile: ./Dockerfile
networks:
- default
networks:
default:
internal: true
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.