Docker端口映射。在容器中运行达芙妮

时间:2017-05-10 14:52:57

标签: nginx docker websocket daphne

我有点困惑。 我在这里以这种方式启动达芙妮: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";
    }
}

1 个答案:

答案 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(它正在使用daphnegunicorn),但是可以更改为仅使用daphne