Thanks @constantine.
Here is a quick overview of the setup:
- docker-compose that makes the following directories accessible to macOS:
** data
** lib
** logs
- OnlyOffice DocumentServer 9.0.4
- Redis
- Nginx proxy
** SSL
** websockets
** access via named URL
** password protection
The forum will only let me upload one image so I’m including a view of the stacked errors after attempting to open the desktop editor for the sample dock.
So onlyoffice is running and accessible, but something is preventing the sample docs from being saved/used.
The error that is covered reads:
The document could not be saved. Please check connection settings or contact your administrator. When you click the “OK” button, you will be prompted to download the document.
The number and nesting of log files makes it challenging to find where problems are but there was this in logs/documentserver/converter/out.log:
[2025-10-21T13:45:58.930] [ERROR] [localhost] [192.168.65.1__172.18.0.5new.docx1759365579948] [uid-1] nodeJS - error downloadFile:url=https://mysampleurl.com/example/download?fileName=new.docx&useraddress=192.168.65.1__172.18.0.5;attempt=1;code:ERR_BAD_REQUEST;connect:undefined AxiosError: Request failed with status code 401
at settle (/snapshot/server/Common/node_modules/axios/dist/node/axios.cjs)
at RedirectableRequest.handleResponse (/snapshot/server/Common/node_modules/axios/dist/node/axios.cjs)
at RedirectableRequest.emit (node:events:536:35)
at RedirectableRequest._processResponse (/snapshot/server/Common/node_modules/follow-redirects/index.js:409:10)
at ClientRequest.<anonymous> (/snapshot/server/Common/node_modules/follow-redirects/index.js:102:12)
at Object.onceWrapper (node:events:639:26)
at ClientRequest.emit (node:events:524:28)
at HTTPParser.parserOnIncomingClient (node:_http_client:702:27)
at HTTPParser.parserOnHeadersComplete (node:_http_common:118:17)
at TLSSocket.socketOnData (node:_http_client:544:22)
at Axios.request (/snapshot/server/Common/node_modules/axios/dist/node/axios.cjs)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.downloadUrlPromise (/snapshot/server/Common/sources/utils.js)
This is a stack from logs/documenserver/docservice.out.log:
[2025-10-21T13:39:25.067] [WARN] [localhost] [docId] [userId] nodeJS - Express server starting...
[2025-10-21T13:39:25.069] [WARN] [localhost] [docId] [userId] nodeJS - Set services.CoAuthoring.token.enable.browser, services.CoAuthoring.token.enable.request.inbox, services.CoAuthoring.token.enable.request.outbox in the Document Server config to prevent an unauthorized access to your documents and the substitution of important parameters in Document Server requests.
[2025-10-21T13:39:25.079] [WARN] [localhost] [docId] [userId] nodeJS - notifyLicenseExpiration(): expiration date is not defined
[2025-10-21T13:39:25.080] [WARN] [localhost] [docId] [userId] nodeJS - notifyLicenseExpiration(): expiration date is not defined
[2025-10-21T13:39:25.227] [WARN] [localhost] [docId] [userId] nodeJS - Express server listening on port 8000 in production-linux mode. Version: 9.0.4. Build: 50
[2025-10-21T13:39:56.926] [WARN] [localhost] [docId] [userId] nodeJS - Express server starting...
[2025-10-21T13:39:56.928] [WARN] [localhost] [docId] [userId] nodeJS - Set services.CoAuthoring.token.enable.browser, services.CoAuthoring.token.enable.request.inbox, services.CoAuthoring.token.enable.request.outbox in the Document Server config to prevent an unauthorized access to your documents and the substitution of important parameters in Document Server requests.
[2025-10-21T13:39:56.937] [WARN] [localhost] [docId] [userId] nodeJS - notifyLicenseExpiration(): expiration date is not defined
[2025-10-21T13:39:56.938] [WARN] [localhost] [docId] [userId] nodeJS - notifyLicenseExpiration(): expiration date is not defined
[2025-10-21T13:39:57.072] [WARN] [localhost] [docId] [userId] nodeJS - Express server listening on port 8000 in production-linux mode. Version: 9.0.4. Build: 50
[2025-10-21T13:45:58.858] [ERROR] [localhost] [192.168.65.1__172.18.0.5new.docx1759365579948] [uid-1] nodeJS - postData error: url = https://mysampleurl.com/example/track?filename=new.docx&useraddress=192.168.65.1__172.18.0.5;data = {"key":"192.168.65.1__172.18.0.5new.docx1759365579948","status":1,"users":["uid-1"],"actions":[{"type":1,"userid":"uid-1"}]} AxiosError: Request failed with status code 401
at settle (/snapshot/server/Common/node_modules/axios/dist/node/axios.cjs)
at IncomingMessage.handleStreamEnd (/snapshot/server/Common/node_modules/axios/dist/node/axios.cjs)
at IncomingMessage.emit (node:events:536:35)
at endReadableNT (node:internal/streams/readable:1698:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
at Axios.request (/snapshot/server/Common/node_modules/axios/dist/node/axios.cjs)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.postRequestPromise (/snapshot/server/Common/sources/utils.js)
at async sendServerRequest (/snapshot/server/DocService/sources/DocsCoServer.js)
at async sendStatusDocument (/snapshot/server/DocService/sources/DocsCoServer.js)
[2025-10-21T13:46:10.216] [ERROR] [localhost] [192.168.65.1__172.18.0.5new.docx1759365579948] [uid-13] nodeJS - postData error: url = https://mysampleurl.com/example/track?filename=new.docx&useraddress=192.168.65.1__172.18.0.5;data = {"key":"192.168.65.1__172.18.0.5new.docx1759365579948","status":4,"actions":[{"type":0,"userid":"uid-1"}]} AxiosError: Request failed with status code 401
at settle (/snapshot/server/Common/node_modules/axios/dist/node/axios.cjs)
at IncomingMessage.handleStreamEnd (/snapshot/server/Common/node_modules/axios/dist/node/axios.cjs)
at IncomingMessage.emit (node:events:536:35)
at endReadableNT (node:internal/streams/readable:1698:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
at Axios.request (/snapshot/server/Common/node_modules/axios/dist/node/axios.cjs)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.postRequestPromise (/snapshot/server/Common/sources/utils.js)
at async sendServerRequest (/snapshot/server/DocService/sources/DocsCoServer.js)
at async sendStatusDocument (/snapshot/server/DocService/sources/DocsCoServer.js)
Lastly, this is what the pertinent docker-compose.yml section looks like:
# ------------------
# OnlyOffice Server
# ------------------
onlyoffice:
# numbered version to avoid surprises on restart
image: onlyoffice/documentserver:9.0.4
container_name: onlyoffice
restart: unless-stopped
environment:
# Database configuration
- DB_TYPE=mysql
- DB_HOST=mysql
- DB_NAME=oo
- DB_USER=oodbuser
- DB_PWD=oopassword
# Redis configuration
- REDIS_SERVER_HOST=redis
- REDIS_SERVER_PORT=6379
# https handled through nginx proxy
- ONLYOFFICE_HTTPS_HSTS_ENABLED=false
# we're not messing with tokens
- JWT_ENABLED=false
# Enable the NodeJS example doc service
- DS_EXAMPLE=true
expose:
- "80" # expose only reveals ports to nginx proxy. no direct access
volumes:
- ./onlyoffice/data:/var/www/onlyoffssh ice/Data
- ./onlyoffice/logs:/var/log/onlyoffice
- ./onlyoffice/lib:/var/lib/onlyoffice
networks:
- proxy