Docker don't create volume

Я делаю бота с pyTelegramBotAPI и использую docker. Образы и контейнеры собираются хорошо и мой бот работает в докер контейнере и его видно в самом телеграме. Но я хочу сделать 'hot change' (в случае изменения кода - докер контейнер будет обновляться автоматически). Похоже что проблема в Volume потому что когда я пытаюсь посмотреть docker volume ls возвращается пустой лист. С самим докером проблем нет, другие приложения собираются нормально, volume создаются. Я запускаю сборку командой docker-compose up --build

Мой Dockerfile

FROM python:3.8.3-alpine
RUN mkdir /app
WORKDIR /app

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1


RUN apk add --no-cache jpeg-dev zlib-dev freetype-dev
RUN apk add --no-cache --virtual .build-deps build-base linux-headers 


COPY ./requirements.txt .
RUN pip install -r requirements.txt


COPY . /app/

Мой docker-compose.yml. main.py - это главный фаил телеграм бота. Портов и хостов здесь не пробрасывал.

version: '3.7'

services:
  bot:
    build: .
    command: python main.py
    restart: always
    env_file:
      - .env
    volumes:
      - ./:/app

Ответы (1 шт):

Автор решения: Sergei Kirjanov

У вас написано:

volumes:
  - ./:/app

Именованый volume делается так: - data:/data -- /data внутри соответствует volume-у data. Но, для этого вопроса оно не надо.

Вам надо, чтобы папка с кодом на хосте соответствовала чему-то внутри: - .:/app. Это эначит /app внутри соответствует текущей папке на хосте. Это не именованый volume, и docker volume ls его не покажет.

Предполагается, что код в текущей папке вместе с docker-compose.yml.

Теперь, если под поменять, внутри будут видны изменения.

Дальше смотрите, как делать ваш 'hot change'. Это зависит от фреймворка.

Если руками, то можно, чтоб сама программа раз в секунду проверяла дату изменения своего исходника в /app, и делала exit. A докер ее переподнимал.

→ Ссылка