Почему мои образы Docker, созданные с помощью "Docker-compose build", не используют правильную версию моего кода? - PullRequest
1 голос
/ 09 ноября 2019

Docker не использует последний код после запуска git checkout <non_master_branch>, хотя я вижу его в vscode.

Я использую следующий файл docker-compose:

version: '2'

volumes: 
  pgdata:
  backend_app:

services:
  nginx:
    container_name: nginx-angular-dev
    image: nginx-angular-dev
    build:
      context: ./frontend
      dockerfile: /.docker/nginx.dockerfile
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - web

  web:
    container_name: django-app-dev
    image: django-app-dev
    build:
      context: ./backend
      dockerfile: /django.dockerfile
    command: ["./wait-for-postgres.sh", "db", "./django-entrypoint.sh"]
    volumes:
      - backend_app:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    env_file: .env
    environment:
      FRONTEND_BASE_URL: http://192.168.99.100/
      BACKEND_BASE_URL: http://192.168.99.100/api/
      MODE_ENV: DOCKER_DEV

  db:
    container_name: django-db
    image: postgres:10
    env_file: .env
    volumes:
      - pgdata:/var/lib/postgresql/data

Я пробовал docker-compose build --no-cache, затем docker-compose up --force-recreate, но это не решило проблему.

В чем корень моей проблемы?

1 Ответ

2 голосов
/ 09 ноября 2019

Ваши volumes: вызывают проблемы. Тома Docker не предназначены для хранения кода, и вы должны удалить объявления томов, в которых упоминается backend_app:.

Ваш файл docker-compose.yml частично содержит:

volumes: 
  backend_app:
services:
  web:
    volumes:
      - backend_app:/code

backend_appявляется именованным томом : он хранит данные, которые должны быть сохранены во время выполнения контейнера. Если том еще не существует в первый раз, данные будут скопированы в него из образа, но после этого Docker считает, что он содержит важные пользовательские данные, которые не должны обновляться.

Еслиесли вы храните код или библиотеки в томе Docker, Docker никогда не обновит его, даже если базовый образ изменится. Это распространенная проблема в приложениях JavaScript, которые монтируют анонимный том в свой каталог node_modules.

В качестве временного обходного пути, если вы docker-compose down -v, он удалит все тома, включая тот, в котором содержится ваш код, и при следующем запуске он будет воссоздан из образа.

Лучшее решение - просто не использовать объем здесь вообще. Удалите строки выше из вашего docker-compose.yml файла. Разрабатывайте и тестируйте свое приложение в среде, отличной от Docker, и когда вы будете готовы провести интеграционное тестирование, запустите docker-compose up --build. Ваш код будет жить на изображении, и обычный docker build создаст новое изображение с новым кодом.

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