docker - 当我可以将 HTTP 请求发送到 Mac 上相同的服务器设置时,为什么我不能将 HTTP 请求发送到在 Windows 上的 docker 映像中运行的 Django 服务器?
问题描述
我有一个用 docker-compose 构建的 Django 服务器,我正在尝试向它发送 HTTP 请求。当 docker 镜像在 Mac 上构建并运行时,我可以从主机和同一网络上的其他机器向主机的 IP 地址发送 HTTP 请求。但是,当在 Windows 上构建并运行相同的 docker 映像时,我只能使用主机将 HTTP 请求发送到主机的 IP 地址。向主机的 IP 地址发送 HTTP 请求时,网络上的其他计算机没有得到响应。我还可以从网络上的另一台计算机成功 ping 主机。
我有应用程序和 docker-compose 从两个文件(.env.prod 和 .env.db.prod)引入的数据库的环境变量,两个文件中的变量对于 docker 的两个版本都是相同的Mac 和 Windows 上的图像,除了 ALLOWED_HOSTS 环境变量,我已将其设置为 docker 图像主机的 IP 地址。我已经验证服务器设置中的 ALLOWED_HOSTS 变量是使用文件中的 IP 地址设置的,因为当我在运行时打印变量时,它会打印文件中的 IP 地址。
码头工人-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"]
码头入口点.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 请求并获得响应,而不管主机运行的是什么操作系统。我该如何解决这个问题?
解决方案
推荐阅读
- pyspark - 如何检查一个数据框中列的值是否仅包含另一个数据框中列中的值
- python-3.x - 如何在此热图上放置遮罩?
- angularjs - 如何从数组中过滤和计算 Typescript 中的项目
- r - Draw residuals for linear, major axis and standardized major axis regressions
- ios - 不同类型的 Json 属性
- python - 检查列表中 dict 之间的差异
- javascript - No such file or directory after confirming the file exists
- python - Arguments passed to nested function with yield keyword
- database - MongoDB: A refers to B. Get A's whose B's satisfy some conditions
- python - 在 for 循环中将一个 numpy 数组添加到另一个 numpy 数组