Задать вопрос
@utsiye

Почему docker не видит .env?

Я впервые пользуюсь докером. Написал dockerfile и docker-compose. Собрал, проверил у себя на пк - запускается, бот видит все переменные. Собираю образ в .tar и перемещаю на сервер, загружаю на сервере - не видит эти переменные. Почему?

docker-compose:
services:
  app:
    build: .
    container_name: fruityblox_bot
    restart: always
    env_file:
      - .env
    volumes:
      - app_logs:/var/log/app
      - ./doc:/app/doc:ro
    networks:
      - fruityblox_network
    healthcheck:
      test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
      interval: 30s
      timeout: 10s
      retries: 3

volumes:
  app_logs:
    driver: local

networks:
  fruityblox_network:
    driver: bridge


Dockerfile:
FROM python:3.10-slim

WORKDIR /app

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    TZ=UTC

RUN apt-get update && apt-get install -y \
    gcc \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app/ ./app/

RUN mkdir -p /var/log/app
RUN useradd --create-home --shell /bin/bash app && \
    chown -R app:app /app /var/log/app

USER app

EXPOSE 8000

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD python -c "import sys; sys.exit(0)"
CMD ["python", "-m", "app.main"]
  • Вопрос задан
  • 172 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting
не видит эти переменные

Что значит не видит, как вы это определили? Посмотрите, что происходит в консоли докера на сервере:
docker-compose up
docker logs fruityblox_bot

Возможные варианты:
- .env не вошел в .tar образ, соответственно не переехал на сервер вместе с ним.
- .env не лежит в той директории, где вы выполняете docker-compose up.
Ответ написан
@aleksxx
Когда вы делаете docker save → .tar → docker load, образ сохраняется без контекста docker-compose. Переменные из env_file: .env не попадают в образ - они применяются только при запуске через docker-compose up.

Нужно передать переменные при запуске

# Создайте .env файл на сервере
cat > .env << EOF
BOT_TOKEN=your_token_here
DATABASE_URL=your_db_url
OTHER_VAR=value
EOF

# Запустите с переменными
docker run -d \
  --name fruityblox_bot \
  --env-file .env \
  -v app_logs:/var/log/app \
  -v ./doc:/app/doc:ro \
  --network fruityblox_network \
  your_image_name


env в docker
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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