Изображение Docker Содержит файлы, которых нет в Docker Container - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть Dockerfile, который содержит шаги для создания каталога и запускает скрипт угловой сборки, выводящий в этот каталог.Кажется, все это работает правильно.Однако, когда контейнер работает, встроенные файлы и каталог отсутствуют.

Если я запускаю оболочку в образе:

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

Это мой файл Docker:

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

Во втором примере статический каталог никогда не создавался и не встраивался.Я думал, что контейнер является экземпляром изображения.Как в контейнере могут отсутствовать файлы с изображения?

1 Ответ

0 голосов
/ 20 декабря 2018

Вы путаете время сборки и время выполнения , а также игра с томами .

Помните, что монтирование хоста имеет приоритетover FS, предоставляемый работающим контейнером, поэтому даже у вашего встроенного образа есть ресурсы, они будут перезаписаны .services.web.volumes, потому что вы монтируете файловую систему хоста, которая перезаписывает результат сборки.

Если вы попытаетесьизбегая монтирования томов, вы заметите, что все работает как положено.

...