我有一个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
如果我在容器中执行外壳程序:
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
这是我的dockerfile:
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
在第二个示例中,从未创建或内置静态目录。我以为容器是图像的实例。容器如何丢失图像中的文件?
答案 0 :(得分:2)
您在混淆构建时间和运行时间以及玩 Volumes 。
请记住,主机安装的优先级高于运行中的容器提供的FS,因此,即使您构建的映像具有资产,它们也将被.services.web.volumes
覆盖,因为您正在安装覆盖构建结果的主机文件系统
如果您尝试避免卷装入,您会注意到一切正常。