# Empty reply from the server when running collabora via docker

**URL:** <https://forum.collaboraonline.com/t/empty-reply-from-the-server-when-running-collabora-via-docker/4002>\
**Category:** User Support\
**Created:** [September 7, 2025, 9:25am UTC](https://forum.collaboraonline.com/t/empty-reply-from-the-server-when-running-collabora-via-docker/4002 "2025-09-07T09:25:13Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ancient2114](https://avatars.discourse-cdn.com/v4/letter/a/7ba0ec/32.png) [@Ancient2114](https://forum.collaboraonline.com/u/Ancient2114)\
**Post date:** [September 7, 2025, 9:25am UTC](https://forum.collaboraonline.com/t/empty-reply-from-the-server-when-running-collabora-via-docker/4002/1 "2025-09-07T09:25:14Z")

</div>

Hello.

I am running a collabora container following the documentation guide, but cannot get it to accept requests. Using image **collabora/code:25.04.5.1.1**

I always get an “Empty reply from the server” message:

This even happens If I curl collabora inside it´s own container:

```auto
* Host localhost:9980 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:9980...
* Connected to localhost (::1) port 9980
* using HTTP/1.x
> GET / HTTP/1.1
> Host: localhost:9980
> User-Agent: curl/8.14.1
> Accept: */*
>
* Request completely sent off
* Empty reply from server
* shutting down connection #0
curl: (52) Empty reply from server

```

I don´t see anything special in the logs. I see the server is listening on the expected port:

```auto
│ Sec-WebSocket-Key: IQtLzx6G8Z7cTZNWstaRgg== │
│ Sec-WebSocket-Version: 13 │
│ Accept-Language: en │
│ Cache-Control: no-cache │
│ Pragma: no-cache │
│ | net/HttpRequest.cpp:159 │
│ wsd-00001-00021 2025-09-07 09:11:45.578108 +0000 [prisoner_poll] TRC #17: Child connection with URI [/coolws/newchild │
│ wsd-00001-00021 2025-09-07 09:11:45.578155 +0000 [prisoner_poll] TRC #17: New child spawned after 5164ms of requestin │
│ wsd-00001-00021 2025-09-07 09:11:45.578202 +0000 [prisoner_poll] INF #17: New child [27], jailId: RAjnO82DUo2TrgLH, c │
│ wsd-00001-00021 2025-09-07 09:11:45.578206 +0000 [prisoner_poll] TRC #17: Calling make_shared<ChildProcess>, for NewC │
│ wsd-00001-00021 2025-09-07 09:11:45.578207 +0000 [prisoner_poll] TRC #17: Upgrading to WebSocket| net/WebSocketHandle │
│ wsd-00001-00021 2025-09-07 09:11:45.578224 +0000 [prisoner_poll] INF #17: WebSocket version: 13, key: [IQtLzx6G8Z7cTZ │
│ wsd-00001-00021 2025-09-07 09:11:45.578238 +0000 [prisoner_poll] TRC #17: Sending WS Upgrade response: Date: Sun, 07 │
│ Server: │
│ Upgrade: websocket │
│ Connection: Upgrade │
│ Sec-WebSocket-Accept: 0L1feMcWn6AZa5RR4LQkPnzA/j0= │
│ | net/WebSocketHandler.hpp:1051 │
│ wsd-00001-00021 2025-09-07 09:11:45.578248 +0000 [prisoner_poll] TRC #17: Wrote 173 bytes of 173 buffered data| net/S │
│ wsd-00001-00021 2025-09-07 09:11:45.578255 +0000 [prisoner_poll] INF ChildProcess ctor [27].| wsd/Process.hpp:40 │
│ wsd-00001-00021 2025-09-07 09:11:45.578265 +0000 [prisoner_poll] TRC Adding a new child 27 with config to NewChildre │
│ wsd-00001-00021 2025-09-07 09:11:45.578268 +0000 [prisoner_poll] INF Have 1 spare child after adding [27]. Notifying. │
│ wsd-00001-00021 2025-09-07 09:11:45.578283 +0000 [prisoner_poll] TRC #16: Handling poll events of prisoner_poll at in │
│ wsd-00001-00021 2025-09-07 09:11:45.578310 +0000 [prisoner_poll] TRC #15: Handling poll events of prisoner_poll at in │
│ wsd-00001-00021 2025-09-07 09:11:45.578315 +0000 [prisoner_poll] TRC #15: setupPollFds getPollEvents: 0x1| net/Socket │
│ wsd-00001-00021 2025-09-07 09:11:45.578317 +0000 [prisoner_poll] TRC #16: setupPollFds getPollEvents: 0x1| net/Socket │
│ wsd-00001-00021 2025-09-07 09:11:45.578319 +0000 [prisoner_poll] TRC #17: setupPollFds getPollEvents: 0x1| net/Socket │
│ wsd-00001-00001 2025-09-07 09:11:40.413735 +0000 [coolwsd] INF Waiting for a new child for a max of 20000ms| wsd/COOL │
│ wsd-00001-00001 2025-09-07 09:11:45.578364 +0000 [coolwsd] TRC Have 1 new children.| wsd/COOLWSD.cpp:3791 │
│ Ready to accept connections on port 9980. │
│ │
│ frk-00022-00022 2025-09-07 09:11:45.566651 +0000 [forkit] INF Forked kit [27]| kit/ForKit.cpp:567 │
│ frk-00022-00022 2025-09-07 09:11:45.566701 +0000 [forkit] TRC Forking child took 9ms| kit/ForKit.cpp:578 │
│ frk-00022-00022 2025-09-07 09:11:45.566711 +0000 [forkit] INF Forkit initialization complete: setting log-level to [w │
│ frk-00022-00022 2025-09-07 09:11:45.580328 +0000 [forkit] WRN The systemplate directory [/opt/cool/systemplate] is re │
│ frk-00022-00022 2025-09-07 09:11:45.591550 +0000 [forkit] WRN The systemplate directory [/opt/cool/systemplate] is re │
│ frk-00022-00022 2025-09-07 09:11:45.602860 +0000 [forkit] WRN The systemplate directory [/opt/cool/systemplate] is re │
│ kit-00027-00027 2025-09-07 09:11:45.577990 +0000 [kit_spare_001] TRC #25: Set socket buffer size to 262144| net/Socke │
│ kit-00027-00027 2025-09-07 09:11:45.577994 +0000 [kit_spare_001] INF New kit client websocket inserted.| kit/Kit.cpp: │
│ kit-00027-00027 2025-09-07 09:11:45.577998 +0000 [kit_spare_001] INF Kit initialization complete: setting log-level t │
│ wsd-00001-00021 2025-09-07 09:11:45.578333 +0000 [prisoner_poll] TRC ppoll start, timeoutMicroS: 17988773 size 3| net │
│ wsd-00001-00001 2025-09-07 09:11:45.578378 +0000 [coolwsd] INF WSD initialization complete: setting log-level to [war │
│

```

I didn´t setup a reverse proxy, as collabora will be running in my internal Kubernetes cluster, and will only be accessible by nextcloud, using the internal service.

---

<div class="post-metadata">

**Author:** ![darshan](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.collaboraonline.com/darshan/32/2230_2.png) [@darshan](https://forum.collaboraonline.com/u/darshan)\
**Post date:** [September 7, 2025, 4:48pm UTC](https://forum.collaboraonline.com/t/empty-reply-from-the-server-when-running-collabora-via-docker/4002/2 "2025-09-07T16:48:01Z")

</div>

hii @Ancient2114

Collabora’s `coolwsd` **does not serve a normal HTTP page on `/`**.  
It only exposes a couple of very specific endpoints (`/hosting/discovery`, `/loleaflet/*`, `/cool/*`) that are meant to be consumed by Nextcloud/OwnCloud/Seafile/etc. If you just hit `/` with curl, it immediately closes the connection, which is why you see “Empty reply from server.”

### How to verify it’s working

Instead of:

```auto
curl -v http://localhost:9980/

```

try:

```auto
curl -vk http://localhost:9980/hosting/discovery

```

Thanks  
Darshan

---

<div class="post-metadata">

**Author:** ![Ancient2114](https://avatars.discourse-cdn.com/v4/letter/a/7ba0ec/32.png) [@Ancient2114](https://forum.collaboraonline.com/u/Ancient2114)\
**Post date:** [September 7, 2025, 6:01pm UTC](https://forum.collaboraonline.com/t/empty-reply-from-the-server-when-running-collabora-via-docker/4002/3 "2025-09-07T18:01:52Z")

</div>

> [@darshan](#):
>
> `curl -vk http://localhost:9980/hosting/discovery`

Same issue. A

```auto
cool@collabora-b99bc56cf-ddbjd:/$ curl -vk http://localhost:9980/hosting/discovery
* Host localhost:9980 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:9980...
* Connected to localhost (::1) port 9980
* using HTTP/1.x
> GET /hosting/discovery HTTP/1.1
> Host: localhost:9980
> User-Agent: curl/8.14.1
> Accept: */*
>
* Request completely sent off
* Empty reply from server
* shutting down connection #0
curl: (52) Empty reply from server

```

I am not doing anything special. Here is my kubernetes deployment.

```auto
apiVersion: apps/v1
kind: Deployment
metadata:
  name: collabora
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: collabora
  template:
    spec:
      serviceAccountName: collabora
      containers:
        - name: collabora
          image: collabora/code:25.04.5.1.1
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 9980
              name: http
          env:
            - name: domain
              value: "nextcloud\\.my.\\domain.\\dev"

```
