Проброс приложения через docker-образ для запуска без подкачки библиотек
Возникла такая проблема, что веб страничка, написанная на Fast-api, запускается через docker-compose. Но при переносе на компьютер без подключения к интернету, не происходит подкачка библиотек, из-за чего не запускается она. Как сделать проброс приложения через докер образы. Гуглил, но всё равно не могу понять. docker-compose.yaml :
version: "3.9"
services:
app:
build: .
depends_on:
- postgres
volumes:
- ./app:/app
ports:
- "5000:80"
links:
- 'postgres'
postgres:
image: postgres:12.7
container_name: postgres
restart: always
environment:
POSTGRES_DB: "database"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "pass"
DATABASE_HOST: "172.17.0.1"
volumes:
- /var/lib/postgresql/data
ports:
- "5432:5432"
Dockerfile:
FROM python:3.10-slim
#
WORKDIR /code/app
#
COPY ./requirements.txt /code/requirements.txt
#
ARG PROXY
RUN if [ -z "$PROXY" ]; then \
pip install --no-cache-dir --upgrade -r /code/requirements.txt; \
else \
pip install --proxy "$PROXY" --no-cache-dir --upgrade -r /code/requirements.txt; \
fi
#
COPY ./app /code/app
#
#
CMD ["uvicorn", "main:app", "--host", "0.0.0.0","--reload", "--port", "80"]
Ответы (1 шт):
Вообще говоря, build: . - это исключительно для разработки. Для деплоймента, даже не в продакшене, в композере нужны готовые образы. Поэтому не боритесь за сборку образа в деплойменте, ИМХО.
Соберите образ на той машине, где есть доступ к интернету, затем перенесите готовый образ на целевую машину.
- Экспорт образа на машине с интернетом
docker save -o image.tar image_name - Импорт образа на машине без интернета:
docker load -i image.tar
В результате на целевой машине появится образ с именем image_name
Поставьте в вашем композере image: image_name и не надо возится с пакетами.
PS. Интересно, откуда на машине без интернета образ postgres:12.7?