docker - Docker Image 包含 Docker 容器不包含的文件
问题描述
我有一个 Dockerfile,其中包含创建目录并运行输出到该目录的角度构建脚本的步骤。这一切似乎运行正常。但是,当容器运行时,构建的文件和目录不存在。
如果我在图像中运行 shell:
docker run -it pnb_web sh
# cd /code/static
# ls
assets favicon.ico index.html main.js main.js.map polyfills.js polyfills.js.map runtime.js runtime.js.map styles.js styles.js.map vendor.js vendor.js.map
如果我在容器中执行 shell:
docker exec -it ea23c7d30333 sh
# cd /code/static
sh: 1: cd: can't cd to /code/static
# cd /code
# ls
Dockerfile api docker-compose.yml frontend manage.py mysite.log pnb profiles requirements.txt settings.ini web_variables.env
david@lightning:~/Projects/pnb$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea23c7d30333 pnb_web "python3 manage.py r…" 13 seconds ago Up 13 seconds 0.0.0.0:8000->8000/tcp pnb_web_1_267d3a69ec52
这是我的码头文件:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt install nodejs
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
RUN mkdir /code/static
WORKDIR /code/frontend
RUN npm install -g @angular/cli
RUN npm install
RUN ng build --outputPath=/code/static
和相关的 docker-compose:
version: '3'
services:
db:
image: postgres
web:
build:
context: .
dockerfile: Dockerfile
working_dir: /code
env_file:
- web_variables.env
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
在第二个示例中,从未创建或构建静态目录。我认为容器是图像的一个实例。容器如何从图像中丢失文件?
解决方案
您在使用Volumes时混淆了 build-time和run-time。
请记住,主机挂载优先于运行容器提供的 FS,因此即使您构建的映像具有资产,它们也会被覆盖,.services.web.volumes
因为您正在挂载覆盖构建结果的主机文件系统。
如果您尝试避免安装卷,您会注意到一切都按预期工作。
推荐阅读
- android - react-native-image-picker launchCamera 在android中不起作用
- kotlin - Kotlin Flow:为什么函数 combine() 在参数中最多只能接受 5 个流
- javascript - req.body 在将数据作为表单数据发送时返回 undefined
- php - PhantomJS 无法渲染页面,但其他人工作
- css - 布雷泽
作为组件包含时样式停止工作 - python - 使用嵌套字典和列表在python中创建一个json对象
- java - 关闭 WDropTargetContextPeerFileStream 并出现堆损坏时 Java 崩溃
- python - 如何获得熊猫数据框中k个连续行的总和?
- machine-learning - 在向后传递 Google-JAX 中保存梯度
- python - 如何删除对已关闭窗口的所有引用?