Я пытаюсь запустить три docker-контейнера, используя docker-compose; база данных postgresql, остальные API и веб-приложение.
Раньше у меня были остальные API и база данных, которые работали отлично (запустили миграцию и запустили сервер), но когда я захотел отправить ему запросы из моего веб-приложения, у меня возникли проблемы с подключением к сети докеров. Все обсуждения в Интернете были посвящены подключению веб-приложения в контейнере к API в другом контейнере, и я не нашел многообещающего метода для подключения к нему (кроме включения переадресации портов в ядре и раскрытия себя в сети? ) поэтому я просто решил упаковать веб-приложение в контейнер.
Моя структура каталогов:
ProjectName
|-> projectapi
|-> |-> api.docker
|-> |-> api_start.sh
|-> projectapp
|-> |-> front.docker
|-> |-> front_start.sh
|-> docker-compose.yml
Проблема заключается в запуске этих сценариев запуска в правильном контексте (мне нужно только запустить npm start
и python manage.py runserver
).
Я не могу придумать ничего из того, что не пробовал, но большинство моих усилий было сосредоточено на поиске путей, потому что долгое время проблема не заключалась в поиске файла, который, я думаю, я исправил.
Это файл docker-compose, я попытался использовать здесь все виды command
записей для запуска желаемого сценария запуска. Я также использовал entrypoint
.
version: '3.7'
services:
db:
container_name: projectdb
image: postgres:9.6-alpine
restart: always
volumes:
- projectdb:/var/lib/postgresql/data/
environment:
POSTGRES_DB: projectdb
POSTGRES_PASSWORD: root
ports:
- "8001:5432"
api:
container_name: projectapi
build:
context: projectapi/
dockerfile: api.docker
ports:
- "8000:8000"
expose:
- "8000"
depends_on:
- db
restart: always
environment:
POSTGRES_DB: 'projectdb'
POSTGRES_USER: 'postgres'
POSTGRES_PASSWORD: 'root'
POSTGRES_HOST: 'db'
front:
container_name: projectapp
build:
context: projectapp/
dockerfile: front.docker
ports:
- "3000:3000"
restart:
always
volumes:
projectdb:
Тогда есть Dockerfiles:
передняя
FROM node:8
RUN mkdir /projectapp
COPY $HOSTDIR/package*.json /projectapp/
RUN npm install /projectapp
COPY $HOSTDIR/* /projectapp/
ENTRYPOINT ["npm", "start", "/projectapp"]
назад
FROM python:3.6-slim
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONBUFFERED 1
RUN mkdir /projectapi
COPY $HOSTDIR/requirements.txt /projectapi/
RUN pip install -r /projectapi/requirements.txt
COPY $HOSTDIR/* /projectapi/
CMD ["python", "manage.py", "migrate"]
Последняя строка также может быть runserver
. Это лишь некоторые примеры перестановок, которые я прошел, но на данный момент я чувствую, что проблема заключается в некотором концептуальном недоразумении, я прочитал документы.
Все сообщения об ошибках - это разные варианты не при запуске скрипта запуска. Я думаю, что был момент, когда мне удалось запустить сценарий запуска, и ошибка стала невозможностью найти manage.py, после чего я начал изучать, как написать сценарий лучше, чем просто: python manage.py runserver
но не сделал ' очень далеко.