无法在浏览器中打开 docker-compose 中给定的端口上的本地主机



我正在尝试使用docker和docker compose构建和运行django应用程序。docker-compose build example_appdocker-compose run example_app运行时没有错误,但当我转到http://127.0.0.1:8000/页面时没有打开,我只是得到了"页面不可用";浏览器中的错误。这是我的Dockeffile、docker-compose.yml和项目结构

Dockerfile

FROM python:3.9-buster
RUN mkdir app
WORKDIR /app
COPY ./requirements.txt /app/requirements.txt
COPY ./requirements_dev.txt /app/requirements_dev.txt
RUN pip install --upgrade pip
RUN pip install -r /app/requirements.txt

docker-compose.yml

version: '3'
services:
example_app:
image: example_app
build:
context: ../
dockerfile: ./docker/Dockerfile
command: bash -c "cd app_examples/drf_example && python manage.py runserver"
volumes:
- ..:/app
ports:
- 8000:8000

项目结构:

──app
──app_examples/drf_example/
────manage.py
────api
────drf_example
──requirements.txt
──requirements_dev.txt
──docker/
────docker-compose.yml
────Dockerfile

默认情况下,Django应用程序绑定到127.0.0.1,这意味着它们只接受来自本地机器的连接。在容器上下文中,本地机器是容器,因此您的应用程序不会接受来自容器外部的连接。

为了让它接受来自任何地方的连接,您可以将绑定地址添加到runserver命令中。在您的情况下,您可以将docker-compose.yml文件中的命令更改为

command: bash -c "cd app_examples/drf_example && python manage.py runserver 0.0.0.0:8000"

在我的情况下,当使用docker composerun应用程序而不是docker composeup时,我不得不使用标志--service-ports,如下所示:

docker compose run --service-ports app

我的码头组合yml:

services:
app:
build:
context: .
dockerfile: Dockerfile.dev
env_file: .env
volumes:
- .:/app
ports:
- "${DJANGO_BIND_PORT}:${DJANGO_BIND_PORT}"
command: [
"./scripts/start-development.sh"]

我的/scripts/.env:

DJANGO_BIND_PORT=8000

我的/scripts/start-development.sh:

set -e
python manage.py makemigrations
python manage.py migrate
python manage.py seed_db --create-super-user
python manage.py runserver 0.0.0.0:${DJANGO_BIND_PORT:-8000}

相关文档

相关Docker组成git线程与更多信息

您需要在Docker文件中公开端口8000

FROM python:3.9-buster
EXPOSE 8000
RUN mkdir app
WORKDIR /app
COPY ./requirements.txt /app/requirements.txt
COPY ./requirements_dev.txt /app/requirements_dev.txt
RUN pip install --upgrade pip
RUN pip install -r /app/requirements.txt

相关内容

最新更新