Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';当我可以将HTTP请求发送到Mac上相同的服务器设置时,我是否可以将HTTP请求发送到Windows上运行在docker映像中的Django服务器?_Docker_Django Rest Framework_Docker Compose_Dockerfile - Fatal编程技术网

为什么可以';当我可以将HTTP请求发送到Mac上相同的服务器设置时,我是否可以将HTTP请求发送到Windows上运行在docker映像中的Django服务器?

为什么可以';当我可以将HTTP请求发送到Mac上相同的服务器设置时,我是否可以将HTTP请求发送到Windows上运行在docker映像中的Django服务器?,docker,django-rest-framework,docker-compose,dockerfile,Docker,Django Rest Framework,Docker Compose,Dockerfile,我有一个用docker compose构建的Django服务器,我正在尝试向它发送HTTP请求。当docker映像在Mac上构建并运行时,我可以从主机和同一网络上的其他机器向主机的IP地址发送HTTP请求。但是,当相同的docker映像在Windows上构建和运行时,我只能使用主机向主机的IP地址发送HTTP请求。网络上的其他计算机在向主机的IP地址发送HTTP请求时不会得到响应。我还可以从网络上的另一台计算机成功ping主机 我有docker compose从两个文件(.env.prod和.e

我有一个用docker compose构建的Django服务器,我正在尝试向它发送HTTP请求。当docker映像在Mac上构建并运行时,我可以从主机和同一网络上的其他机器向主机的IP地址发送HTTP请求。但是,当相同的docker映像在Windows上构建和运行时,我只能使用主机向主机的IP地址发送HTTP请求。网络上的其他计算机在向主机的IP地址发送HTTP请求时不会得到响应。我还可以从网络上的另一台计算机成功ping主机

我有docker compose从两个文件(.env.prod和.env.db.prod)中引入的应用程序和数据库的环境变量,这两个文件中的变量对于Mac和Windows上的docker映像的两个版本都是相同的,除了ALLOWED_HOSTS环境变量之外,我已经将它设置为docker映像主机的IP地址。我已验证服务器设置中允许的_HOSTS变量是否设置为文件中的IP地址,因为当我在运行时打印变量时,它会打印文件中的IP地址

docker-compose.prod.yml:

version: '3.7'

services:
  web:
    build:
      context: ./
      dockerfile: Dockerfile.prod
    command: gunicorn EchoNine.wsgi:application --bind 0.0.0.0:80
    ports:
      - 80:80
    env_file: .env.prod
    depends_on:
      - db
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file: .env.db.prod
    ports:
      - 5432:5432

volumes:
  postgres_data:
Dockerfile.prod:

# pull official base image
FROM python:3.7.4-alpine

# set work directory
ARG PROJECT=EchoNine
ARG PROJECT_DIR=/var/www/${PROJECT}
RUN mkdir -p $PROJECT_DIR
WORKDIR $PROJECT_DIR

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add postgresql-dev \
    && pip install psycopg2 \
    && pip install django \
    && pip install djangorestframework \
    && pip install gunicorn \
    && apk del build-deps

# Copy your application code to the container (make sure you create a .dockerignore file if any large files or directories should be excluded)
COPY . $PROJECT_DIR/

# run entrypoint.sh
ENTRYPOINT ["/var/www/EchoNine/docker-entrypoint.prod.sh"]
docker-entrypoint.prod.sh:

#!/bin/sh

if [ "$DATABASE" = "postgres" ]
then
    echo "Waiting for postgres..."

    while ! nc -z $SQL_HOST $SQL_PORT; do
      sleep 0.1
    done

    echo "PostgreSQL started"
fi

exec $@
我希望相同的docker映像代码在两个操作系统上以相同的方式构建和运行,并且我希望能够从同一网络上的其他计算机发送HTTP请求并获得响应,而不管主机运行的是什么操作系统。我如何解决这个问题