我的 docker 在Linux机器上工作得很好。在我的Windows笔记本电脑上使用类似的docker,docker-compose和配置文件,但它们没有。
浏览到127.0.0.1:1337时,我收到502 Bad Gateway错误。从 docker 日志pbnginx我得到:
172.20.0.1 - - [08/Oct/2020:20:32:04 +0000] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "-"
172.20.0.1 - - [08/Oct/2020:20:33:12 +0000] "GET / HTTP/1.1" 502 559 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "-"
2020/10/08 20:33:12 [error] 30#30: *2 upstream prematurely closed connection while reading response header from upstream, client: 172.20.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://172.20.0.2:6060/", host: "localhost:1337"
我的Dockerfile:FROM python:3.6
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN chmod -R 755 /code
RUN useradd -m user
RUN chmod 777 /home/user
USER user
ENV PORT 7000
EXPOSE 7000
CMD ["gunicorn", "PB_Django.wsgi:application", "--config", "docker/pb_django/gunicorn.conf", "--keep-alive", "600"]
我的docker-compose.ymlversion: "3.8"
services:
web:
build:
context: ../..
dockerfile: docker/pb_django/Dockerfile
image: pbdjango
container_name: pbdjango
expose:
- "7000"
networks:
- cieenetwork
external_links:
- stanfordcorenlp
nginx:
build: ./nginx
image: pbnginx
container_name: pbnginx
ports:
- "1337:80"
depends_on:
- web
networks:
- cieenetwork
networks:
cieenetwork:
external: true
我的Nginx Dockerfile:FROM nginx:alpine
RUN rm -f /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY static_cdn /static
我的nginx.conf文件:upstream pb_django {
server web:7000 fail_timeout=0;
}
server {
root /;
listen 80;
location / {
proxy_pass http://pb_django/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
proxy_read_timeout 10m;
proxy_connect_timeout 10m;
client_max_body_size 700m;
}
location /static/ {
}
}
我的gunicorn.conf是:bind = "0.0.0.0:7000"
timeout = 10000
docker ps -a显示:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b4e4d92b259 pbnginx "/docker-entrypoint.…" 28 minutes ago Up 28 minutes 0.0.0.0:1337->80/tcp pbnginx
c332c8e378e1 pbdjango "gunicorn PB_Django.…" 28 minutes ago Up 28 minutes 7000/tcp pbdjango
1989d9a75c0d stanfordcorenlp "/bin/sh -c 'java -j…" 17 hours ago Up 17 hours 0.0.0.0:9000->9000/tcp stanfordcorenlp
docker network inspect cieenetwork显示:[
{
"Name": "cieenetwork",
"Id": "a58547f1d257eae4880f5411482bb33be4534a4299e55b0e40780e3f6679f521",
"Created": "2020-09-30T17:49:38.9145072Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"1989d9a75c0d8722a89a879d57d5c2d454507ff43f3b4b79742469556d48b387": {
"Name": "stanfordcorenlp",
"EndpointID": "c8aff59b96aa2816daee7cf4e82b9d894a56d8870be935ac28c1b1754eb62aed",
"MacAddress": "02:42:ac:14:00:02",
"IPv4Address": "172.20.0.2/16",
"IPv6Address": ""
},
"1b4e4d92b2597077027bbce9f8aa22a137de581592c58d7dc0204f452ce7e2ca": {
"Name": "pbnginx",
"EndpointID": "1f3c78aa73463610d166d3ba10792e095bee76ace3b29c1e81da567456dacdd1",
"MacAddress": "02:42:ac:14:00:04",
"IPv4Address": "172.20.0.4/16",
"IPv6Address": ""
},
"c332c8e378e192f661ebb17f6b8ee9a88c47c76355e9a2acc4ecc34a9687a1de": {
"Name": "pbdjango",
"EndpointID": "c78c8d3e92472191f24f2c6bcc7108038a754bb5f933a49f59bd4e6243d1295e",
"MacAddress": "02:42:ac:14:00:03",
"IPv4Address": "172.20.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
最佳答案
查看“Quickstart: Compose and Django”,尝试进行测试,注意:
On certain platforms (Windows 10), you might need to edit ALLOWED_HOSTS inside
settings.py
and add your Docker host name or IP address to the list.
For demo purposes, you can set the value to:ALLOWED_HOSTS = ['*']
This value is not safe for production usage
Refer to the Django documentation for more information.
还检查是否与“Dockerizing Django with Postgres, Gunicorn, and Nginx”有任何区别。
关于docker - Docker在Linux机器上工作,但在Windows机器上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64263260/