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

问题描述 投票:0回答:3

我正在尝试使用 docker 和 docker-compose 构建和运行 django 应用程序。

docker-compose build example_app
docker-compose run example_app
运行没有错误,但是当我转到
http://127.0.0.1:8000/
页面没有打开时,我只是在浏览器中收到“页面不可用”错误。 这是我的 Dockeffile、docker-compose.yml 和项目结构

Docker文件

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
python django docker docker-compose containers
3个回答
5
投票

默认情况下,Django 应用程序bind 到 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"

0
投票

就我而言,在使用 docker compose

--service-ports
app 而不是 docker compose
run
时,我不得不使用标志
up
,像这样:

docker compose run --service-ports app

我的docker-compose.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 compose git thread更多信息


-2
投票

您需要在 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
© www.soinside.com 2019 - 2024. All rights reserved.