Docker Ignore плохо работает с docker compose и моей файловой структурой - PullRequest
0 голосов
/ 26 декабря 2018

Я настраиваю новый dockerfile и docker-compose.yml.Ниже я покажу сначала мою файловую структуру с рельсами, и я хочу использовать новый .dockerignore для игнорирования node_modules , .git .

мой докерверсия : версия Docker 18.09.0, сборка 4d60db4

my docker-compose.yml , чем я пользуюсь v3

Корневой каталог

- Gemfile
- app
- bin
- cable
- db
- config
- lib
- node_modules
- public
- vendor
- docker
  - app
    - Dockerfile
- .git
- .gitignore
- .dockerignore
- docker-compose.yml

docker / app / Dockerfile

FROM ruby:2.3.1
ARG RAILS_ROOT
RUN mkdir -p $RAILS_ROOT
WORKDIR $RAILS_ROOT
COPY . .

docker-compose.yml


version: '3'
services:
  app:
    build: &build_core
      context: .
      dockerfile: ./docker/app/Dockerfile
      args:
        - APP_NAME=myappname
        - RAILS_ROOT=/var/www/${APP_NAME}_web
        - RAILS_ENV=development
        - RAILS_SERVE_STATIC_FILES=true
        - RAILS_LOG_TO_STDOUT=true
        - BUNDLE_OPTIONS=
        - NPM_OPTIONS=
    image: custom-web:1.0
    container_name: app
    volumes:
      - .:/var/www/${APP_NAME}_web
    env_file:
      - .env
    environment:
      RAILS_ROOT: "/var/www/${APP_NAME}_web"

.dockerignore


.git/
node_modules/

Я построил свое изображение с помощью следующей команды

docker-compose build app

Когда я смотрю наконтейнер, файлы файлов все еще копируются в мой контейнер

возможно, это контекст или куда я должен поместить свой .dockerignore, также я помещаю свой .dockerignore в docker / app / .dockerignore, и у меня та же проблема.

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Я столкнулся с той же проблемой с каталогами docker build, node_modules, которые не игнорировались.

РЕШЕНИЕ
Изменение node_modules на **/node_modules внутри .dockerignoreрешил мою проблему.

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

Во время сборки директива COPY . . (внутри Dockerfile) правильно копирует все файлы, не указанные в .dockerignore в $RAILS_ROOT (внутри изображения).Здесь нет проблем (проверьте это, запустив docker run --rm custom-web:1.0 ls -al).

Но здесь вы запускаете docker-compose, чтобы запустить контейнер, и вы определили объем:

volumes:
    - .:/var/www/${APP_NAME}_web

Это означает, чтофайлы из того же каталога, что и docker-compose.yml, совместно используются хостом и контейнером.Вот почему вы находите все файлы (даже те, что перечислены в .dockerignore) в $RAILS_ROOT (рабочий каталог custom-web:1.0 image) после запуска контейнера через docker-compose.

Если вам действительно нужно обмениваться файлами междуваш хост и контейнер (через том), я предлагаю вам смонтировать текущий каталог в другом месте, отличном от указанного в вашем Dockerfile, например:

volumes:
    - .:/${APP_NAME}_web

В противном случае, используя COPY . . и объем здесь избыточен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...