我有点困惑。
我在这里以这种方式启动达芙妮:daphne common.asgi:channel_layer --port 8338
,一切都是"好的"用它。当我使用curl -v 127.0.0.1:8338
时,获取以下输出
* Rebuilt URL to: 127.0.0.1:8338/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8338 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1:8338
> User-Agent: curl/7.51.0
> Accept: */*
但是当我尝试使用端口分配启动docker容器时,它并不认为已经使用了8338端口:
docker run \
-tid \
-p 8338:8338 \
-v $(PWD):/app \
--network matryoshka_net \
--hostname matryoshka_daphne \
--name matryoshka_daphne \
matryoshka_daphne
在代码上运行是" ok"与达芙妮已经启动。 所以在我看来,端口没有正确分配。
我缺少什么?
因此产生了下一个问题,我无法通过nginx将信号重定向到websockets到我的docker容器。因为端口8338上没有任何东西(当只启动容器时)。这是nginx.conf:
server {
listen 127.0.0.1;
gzip on;
gzip_types text/plain application/json text/css application/x-javascript text/javascript application/javascript;
location / {
proxy_set_header Host $host;
proxy_read_timeout 20s;
client_max_body_size 10m;
proxy_pass http://127.0.0.1:8000;
}
location /ws/ {
proxy_pass http://127.0.0.1:8338;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
答案 0 :(得分:1)
我了解您在运行docker时在同一台计算机上有nginx。在proxy_pass中,您应指向Docker IP,该IP应该为0.0.0.0,因此conf中的行应如下所示:
proxy_pass http://0.0.0.0:8338;
这两个位置应该相同:location /
和location /ws/
,因为您在端口8338上运行daphne
。
请查看我的示例conf(它正在使用daphne
和gunicorn
),但是可以更改为仅使用daphne
。