#django #docker
Вопрос:
Когда мы хотим запустить простое приложение Django, мы используем термин: python manage.py runserver <ip>:<port>
запустить веб-сервер с нужным IP-адресом. Я попытался сделать то же самое с Докером и Джанго внутри файла docker-compose:
version: '3.1'
volumes:
init-db:
data-db:
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: <name>
MONGO_INITDB_ROOT_PASSWORD: <password>
ports:
- 27020:27020
command: mongod --quiet --logpath /dev/null
splash:
image: scrapinghub/splash
ports:
- "8050:8050"
restart: always
web:
build: .
restart: unless-stopped
command: >
bash -c "pip install -r requirements.txt amp;amp; python manage.py makemigrations amp;amp; python manage.py migrate amp;amp; python manage.py runserver <some_ip>:<some_port>"
tty: true
volumes:
- .:/usr/src/app
ports:
- 8000:8000
depends_on:
- mongo
Теперь, после бега, это дает мне web_1 | Error: That IP address can't be assigned to.
Примечание: Я получаю IP-адрес с помощью ipconfig Windows, затем выбираю ipv4
Ответ №1:
Процесс внутри контейнера Docker должен прослушиваться по специальному адресу «все интерфейсы» 0.0.0.0. Сам контейнер имеет собственное частное IP-пространство и не может привязываться к произвольным интерфейсам хоста.
И наоборот, в ports:
объявлении в вашем docker-compose.yml
может быть указан конкретный IP-адрес для прослушивания, и это должен быть один из интерфейсов хоста.
Таким образом, ваш docker-compose.yml
файл должен выглядеть примерно так:
version: '3.8'
services:
web:
build: .
restart: unless-stopped
ports: ['192.168.1.2:8000:8000'] # <-- host IP address here
depends_on: [mongo]
# shouldn't need tty:, volumes:, or command:
mongo: # as in the question, except
ports: ['27020:27017'] # <-- second port needs to be standard MongoDB port
И соответствующий файл настройки должен выглядеть примерно так:
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
ENTRYPOINT ["/app/entrypoint.sh"]
# #!/bin/sh
# python manage.py migrate
# exec "$@"
EXPOSE 8000
# Use 0.0.0 as the listen address vvvvvvv
CMD ["./manage.py", "runserver", "0.0.0.0:8000"]
Ответ №2:
В итоге я использовал тот же код, который добавил, перезагрузка моего компьютера была решением, которого я не ожидал.