Задать вопрос
@Dias747
Студент который мечтают стат программистом

Почему при build docker compose не видит файлы?

На сервере установлен и поднят gitlab runner dind

При запуске на нем docker compose -d --build не видит файлы которые монтируется в volumes.

вот как выглядит docker-compose

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/nginx/certs
    depends_on:
      - frontend
      - admin
      - backend
  
  frontend:
    build:
      context: ./frontend/Euromed.Frontend
    depends_on:
      - backend
  
  admin:
    build:
      context: ./frontend/Euromed.Admin
    depends_on:
      - backend
  
  backend:
    build:
      context: ./backend/Euromed
    volumes:
      - images-data:/app/wwwroot/images
    depends_on:
      db:
        condition: service_healthy
  
  db:
    image: postgres:16
    restart: always
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=euromed
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d euromed"]
      interval: 5s
      timeout: 5s
      retries: 5

volumes:
  postgres_data:
  images-data:


stages:
  - build-and-deploy

build-and-deploy-job:
  stage: build-and-deploy
  script:
    - docker compose up -d --build


Сейчас не видит файл nginx.conf
68a0703e65890362914052.png
  • Вопрос задан
  • 37 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@Dias747 Автор вопроса
Студент который мечтают стат программистом
Создал новый образ для nginx
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Проблема связана с особенностями dind в раннере. Когда используется dind, Docker daemon работает в отдельном контейнере, и относительные пути в volumes ссылаются на файловую систему внутри dind контейнера, а не на рабочую директорию вашего CI job.

Поэтому, при деплое никогда не используйте вольюмы для конфигурационных файлов и всякого прочего добра. Надо просто их скопировать в образ, и проблема улетучится как туман на рассвете. Но как же нам быть, когда мы хотим использовать стандартный nginx образ? Чешем репу и просто заворачиваем образ nginx в наш собственный кастомный образ с нашим собственным докерфайлом для nginx:

# Dockerfile для nginx в отдельной директории nginx
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf
COPY certs /etc/nginx/certs


# docker-compose.yml
services:
  nginx:
    build:
      context: ./nginx
    ports:
      - "80:80"
      - "443:443"
    # volumes убираем для статических файлов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы