mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-05-21 02:32:22 -05:00
All-in-One Docker image starts API only (no frontend / no port 80 http server) on Synology NAS #2436
Closed
opened 2026-03-22 14:07:28 -05:00 by GiteaMirror
·
5 comments
No Branch/Tag Specified
main
renovate/dev-dependencies
fix-list-sort-resets
claude/analyze-beans-project-9VxoS
feat-huma-api-v2-migration
feat-v2-foundation
spike-huma-openapi3
claude/investigate-swagger3-support-nyyUa
feat-list-view-buckets
ci-mysql-8-test
codex/analyze-codebase-for-email-task-feature
feat-project-templates
csv-import-feature
claude/email-reply-comments-wpdcQ
fix-oidc-pkce-support
fix/overview-subtasks-expand
feat/bucket-select-task-detail
feat-soft-delete-projects
claude/review-bot-design-plan-cf5C3
claude/project-scoped-api-tokens-KTqR3
claude/explore-openclaw-integration-KQEzg
claude/project-scoped-api-tokens-yv5KS
fix-duplicate-close-button
feat-list-view-sorting
feat/official-vite-sentry-plugin
feat/highlight-overdue-tasks
feat/add-enter-key-form-submission-handling
feat/TipTap-nits
feat/update-caldavtimetotimestamp-parsing
feat-phosphor-icons
wip-plans
claude/investigate-issue-2173-llKme
fix-description-text-drag
feat-custom-keyboard-shortcuts
pr-1845-ci
codex/fix-drag-and-drop-behavior-inconsistency
copilot/add-clickable-labels-for-filtering
copilot/fix-issue-1786
playwright-migration
fix-kanban-repeating-wip
copilot/fix-1498
feature/replace-axios
codex/upgrade-to-tailwind-4.1.8-using-pnpm
codex/add-cypress-test-for-avatar-types
feature/biome
feature/oxc
codex/update-flexsearch-to-0.8.205
4r6ni9-codex/fix-deprecated-sass-@import-usage
codex/fix-deprecated-sass-@import-usage
codex/add-cypress-test-for-task-list-refresh-fix
codex/fix-quick-add-magic-not-adding-tasks
codex/fix-all-type-errors
codex/fix-mimetype-for-docs.json
feature/caldav-from-scratch
feature/gh-actions-hetzner
fix-ci
feat/new-logger
jyte-better-dev-config
feat/add-team-member-with-enter
fix/button-and-icon-types
fix/notifications-component-name-collision
feature/null-time
renovate/tailwindcss-4.x
feature/unplugin-vue-router
fix/deprecated-import
feature/zod-schema
renovate/golangci-golangci-lint-1.x
fix/tiptap-editor-reactive-destructuring
release/0.24
feat/improve-add-task
fix/saved-filter-search
feat/webp-and-avif-attachment-previews
feature/migrate-back-to-bulma
fix/sass-add-missing-list-import
feature/sticky-demo-bar
fix/gantt-view-switch
feature/typesense-position-join
feature/focus-visible
dependencies/golangci-lint
feature/better-filter-syntax
fix/tiptap-task-list
renovate/github.com-golang-jwt-jwt-v4-5.x
feature/hide-forbidden-related-tasks
renovate/golang-1.x
release/0.20
release/0.17
release/0.16
release/0.15
release/0.14
v2.3.0
v2.2.2
v2.2.1
v2.2.0
v2.1.0
v2.0.0
v1.1.0
v1.0.0
v1.0.0-rc4
v1.0.0-rc3
v1.0.0-rc2
v1.0.0-rc1
v1.0.0-rc0
v0.24.6
v0.24.5
v0.24.4
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.0
v0.22.1
v0.22.0
0.21.0
v0.21.0
v0.20.4
v0.20.5
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.2
v0.19.1
v0.19.0
vue3
v0.18.1
v0.18.0
v0.17.1
v0.17.0
v0.16.1
v0.16.0
v0.15.1
v0.15.0
v0.14.1
v0.14.0
v0.13.1
v0.13
v0.12
v0.11
v0.10
v0.9
v0.8
v0.7
v0.6
v0.5
v0.4
v0.3
v0.2
v0.1
Labels
Clear labels
area/api
area/attachments
area/auth
area/avatars
area/backup-restore
area/caldav
area/calendar-view
area/comments
area/config
area/database
area/desktop
area/docker
area/email
area/favorites
area/filters
area/frontend
area/gantt
area/i18n
area/import-export
area/internal-code
area/kanban
area/labels
area/list-view
area/mobile
area/notifications
area/permissions
area/projects
area/pwa
area/recurring-tasks
area/reminders
area/search
area/shortcuts
area/subtasks
area/sync
area/table-view
area/task-editor
area/task-metadata
area/task-relations
area/teams
area/theming
area/time-tracking
area/typesense
area/views
area/webhooks
bug
changes requested
concern/accessibility
concern/performance
concern/regression
concern/ux
confirmed
db/mysql
dependencies
enhancement
good first issue
help wanted
integration/inbound
integration/outbound
kind/bug
kind/feature
needs reproduction
pull-request
question
security
support
upstream issue
waiting for reply
wontfix
Mirrored from GitHub Pull Request
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/vikunja#2436
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Sturmi77 on GitHub (Nov 28, 2025).
Description
No response
Vikunja Version
v1.0.0-rc3
Browser and version
Edge
Can you reproduce the bug on the Vikunja demo site?
Please select
Screenshots
Hi,
when running Vikunja via the all‑in‑one Docker image on a Synology NAS, only the API server on port 3456 starts, but the HTTP server on port 80 (frontend) never comes up. The container itself is running fine, database migrations succeed (tested with SQLite and PostgreSQL), but the web UI is not accessible.
Environment
Platform: Synology NAS (Docker / Portainer stack)
Vikunja image tags tested:
vikunja/vikunja:0.24.6 (IMAGE ID: cec159e222f5, SIZE: 91.2MB)
vikunja/vikunja:0.24.5 (IMAGE ID: eb5dd665369a, SIZE: 91.2MB)
vikunja/vikunja:1.0.0-rc2 (IMAGE ID: 01763c984138, SIZE: 71.2MB)
vikunja/vikunja:1.0.0-rc3 (IMAGE ID: 01763c984138, SIZE: 71.2MB)
Reverse proxy: none during tests (nginx stopped)
Browser: Edge
Docker Compose (current PostgreSQL setup)
text
version: "3.9"
services:
postgres:
image: postgres:16-alpine
container_name: vikunja-db
restart: unless-stopped
environment:
POSTGRES_DB: vikunja
POSTGRES_USER: vikunja
POSTGRES_PASSWORD: supersecret
volumes:
- /data/compose/77/vikunja-pgdata:/var/lib/postgresql/data
vikunja:
image: vikunja/vikunja:0.24.6
container_name: vikunja
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_HOST: postgres
VIKUNJA_DATABASE_PORT: 5432
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_PASSWORD: supersecret
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_SERVICE_PUBLICURL: "http://192.168.178.115:8183"
ports:
- "8183:80"
volumes:
- /data/compose/77/vikunja-files:/app/files
(I also reproduced the same behaviour with a minimal SQLite setup.)
Actual behaviour
Container starts and stays in running state. Logs show successful migrations and API startup, but only the API server on port 3456:
text
time=2025-11-28T17:03:51.433Z level=INFO msg="No config file found, using default or config from environment variables."
time=2025-11-28T17:03:51.433Z level=INFO msg="Running migrations…"
time=2025-11-28T17:03:51.772Z level=INFO msg="Ran all migrations successfully."
time=2025-11-28T17:03:51.774Z level=INFO msg="Mailer is disabled, not sending reminders per mail"
time=2025-11-28T17:03:51.774Z level=INFO msg="Mailer is disabled, not sending overdue per mail"
time=2025-11-28T17:03:51.774Z level=INFO msg="Vikunja version v1.0.0-rc3"
⇨ http server started on [::]:3456
There is never a line like:
text
⇨ http server started on [::]:80
docker inspect confirms that port 80/tcp is mapped to host port 8183.
From another machine, curl http://:8183/ fails (connection closed / no HTTP response).
SSH from the NAS itself to curl http://localhost:8183/ also fails.
Only the API on port 3456 is listening inside the container.
The warning about failed to create modcache index dir: mkdir /.cache: permission denied appears, but seems unrelated.
Expected behaviour
All‑in‑one image should start both:
HTTP server for the web frontend on port 80.
API server on port 3456.
Logs should contain both:
http server started on [::]:80
http server started on [::]:3456
Web UI should be available at http://:8183.
Troubleshooting already done
Tested with SQLite backend (VIKUNJA_DATABASE_TYPE=sqlite) and clean DB file.
Tested with PostgreSQL backend as shown in the compose file above.
Deleted volumes / DB directories multiple times to ensure a fresh install.
Stopped nginx / reverse proxy on the host to rule out port conflicts.
Tried different image tags (0.24.5, 0.24.6, 1.0.0-rc2, 1.0.0-rc3).
Verified image sizes and IDs:
0.24.x images ~91MB, rc images ~71MB.
Container user is 1000 (no custom user: override in compose).
No additional environment variables like VIKUNJA_SERVICE_ROOTPATH set anymore.
Questions
Is there any known issue with the all‑in‑one Docker image on Synology/NAS or specific architectures where only the API server is started?
Are there additional environment variables or build flags required to enable the HTTP server on port 80 in the latest images?
Can you reproduce this behaviour with the compose example above on a similar environment?
Thanks a lot for having a look – happy to provide more logs or run test builds if needed.
@kolaente commented on GitHub (Nov 29, 2025):
There is no separate http server for the frontend on port 80. Everything is served on port 3456.
You can change this port in the settings: https://vikunja.io/docs/config-options/#1-service-interface
@Sturmi77 commented on GitHub (Nov 29, 2025):
Thansk but I cant reach the frontend on 3456 either.
I have also tried different port confirguations and no port related configuration at all.
The frontend is not reachable on any port.
@kolaente commented on GitHub (Dec 1, 2025):
You have only exposed port 80 in your docker compose, not port 3456. You can only access the ports that you expose from the outside of the container
@Sturmi77 commented on GitHub (Dec 1, 2025):
Thanks, but also with differnet configuration exposing 3456 I cant reach the frontend.
The docker inspect also seems to show that 3456 is exposed
AppArmorProfile:"docker-default",
Args:[
],
Config:{
AttachStderr:true,
AttachStdin:false,
AttachStdout:true,
Cmd:null,
Domainname:"",
Entrypoint:[
"/app/vikunja/vikunja"
],
Env:[
"VIKUNJA_SERVICE_INTERFACE=3456",
"VIKUNJA_SERVICE_PUBLICURL=http://192.168.178.115:3456",
"VIKUNJA_DATABASE_TYPE=postgres",
"VIKUNJA_DATABASE_HOST=postgres",
"VIKUNJA_DATABASE_PORT=5432",
"VIKUNJA_DATABASE_USER=vikunja",
"VIKUNJA_DATABASE_PASSWORD=supersecret",
"VIKUNJA_DATABASE_DATABASE=vikunja",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"VIKUNJA_SERVICE_ROOTPATH=/app/vikunja/",
"VIKUNJA_DATABASE_PATH=/db/vikunja.db"
],
ExposedPorts:{
3456/tcp:{
}
},
Hostname:"128a8a5e84fa",
Image:"vikunja/vikunja:latest",
Labels:{
com.docker.compose.config-hash:"73e2147cd868c2e522d79e916f9ea441c725406627a6824a4fd3c497c331a421",
com.docker.compose.container-number:"1",
com.docker.compose.depends_on:"postgres:service_healthy:false",
com.docker.compose.image:"sha256:95d8134f177e03ca177cf24d1a28a350ba70ab9a10a2dfe6e754e036a5c93b6f",
com.docker.compose.oneoff:"False",
com.docker.compose.project:"vikunja",
com.docker.compose.project.config_files:"",
com.docker.compose.project.working_dir:"/data/compose/77",
com.docker.compose.replace:"1f0ee593fe6bce84beedbf64aeb1d0827bd20373ee5d770648179ee1da52c9cc",
com.docker.compose.service:"vikunja",
com.docker.compose.version:"",
org.opencontainers.image.authors:"maintainers@vikunja.io",
org.opencontainers.image.created:"2025-11-27T22:18:16.299Z",
org.opencontainers.image.description:"The to-do app to organize your life.",
org.opencontainers.image.documentation:"https://vikunja.io/docs",
org.opencontainers.image.licenses:"AGPL-3.0",
org.opencontainers.image.revision:"b175c7ff6e9492971f455e8e2b7f7b6c934671ab",
org.opencontainers.image.source:"https://github.com/go-vikunja/vikunja",
org.opencontainers.image.title:"vikunja",
org.opencontainers.image.url:"https://github.com/go-vikunja/vikunja",
org.opencontainers.image.version:"1.0.0-rc3"
},
OnBuild:null,
OpenStdin:false,
StdinOnce:false,
Tty:false,
User:"1000",
Volumes:null,
WorkingDir:"/app/vikunja"
},
Created:"2025-12-01T11:07:10.753045387Z",
Driver:"btrfs",
ExecIDs:null,
GraphDriver:{
Data:null,
Name:"btrfs"
},
HostConfig:{
AutoRemove:false,
Binds:[
"/volume1/docker/vikunja/files:/app/files:rw"
],
BlkioDeviceReadBps:null,
BlkioDeviceReadIOps:null,
BlkioDeviceWriteBps:null,
BlkioDeviceWriteIOps:null,
BlkioWeight:0,
BlkioWeightDevice:null,
CapAdd:null,
CapDrop:null,
Cgroup:"",
CgroupParent:"",
CgroupnsMode:"host",
ConsoleSize:[
0,
0
],
ContainerIDFile:"",
CpuCount:0,
CpuPercent:0,
CpuPeriod:0,
CpuQuota:0,
CpuRealtimePeriod:0,
CpuRealtimeRuntime:0,
CpuShares:0,
CpusetCpus:"",
CpusetMems:"",
DeviceCgroupRules:null,
DeviceRequests:null,
Devices:null,
Dns:null,
DnsOptions:null,
DnsSearch:null,
ExtraHosts:[
],
GroupAdd:null,
IOMaximumBandwidth:0,
IOMaximumIOps:0,
IpcMode:"private",
Isolation:"",
Links:null,
LogConfig:{
Config:{
},
Type:"db"
},
MaskedPaths:[
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
Memory:0,
MemoryReservation:0,
MemorySwap:0,
MemorySwappiness:null,
NanoCpus:0,
NetworkMode:"vikunja_default",
OomKillDisable:false,
OomScoreAdj:0,
PidMode:"",
PidsLimit:null,
PortBindings:{
3456/tcp:[
{
HostIp:"",
HostPort:"3456"
}
]
},
Privileged:false,
PublishAllPorts:false,
ReadonlyPaths:[
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
],
ReadonlyRootfs:false,
RestartPolicy:{
MaximumRetryCount:0,
Name:"unless-stopped"
},
Runtime:"runc",
SecurityOpt:null,
ShmSize:67108864,
UTSMode:"",
Ulimits:null,
UsernsMode:"",
VolumeDriver:"",
VolumesFrom:null
},
HostnamePath:"/volume1/@docker/containers/128a8a5e84fa24a4aa4930f2a73aa433589b8b73d22ef85c8d6a30349001c56f/hostname",
HostsPath:"/volume1/@docker/containers/128a8a5e84fa24a4aa4930f2a73aa433589b8b73d22ef85c8d6a30349001c56f/hosts",
Id:"128a8a5e84fa24a4aa4930f2a73aa433589b8b73d22ef85c8d6a30349001c56f",
Image:"sha256:95d8134f177e03ca177cf24d1a28a350ba70ab9a10a2dfe6e754e036a5c93b6f",
LogPath:"/volume1/@docker/containers/128a8a5e84fa24a4aa4930f2a73aa433589b8b73d22ef85c8d6a30349001c56f/log.db",
MountLabel:"",
Mounts:[
{
Destination:"/app/files",
Mode:"rw",
Propagation:"rprivate",
RW:true,
Source:"/volume1/docker/vikunja/files",
Type:"bind"
}
],
Name:"/vikunja",
NetworkSettings:{
Bridge:"",
EndpointID:"",
Gateway:"",
GlobalIPv6Address:"",
GlobalIPv6PrefixLen:0,
HairpinMode:false,
IPAddress:"",
IPPrefixLen:0,
IPv6Gateway:"",
LinkLocalIPv6Address:"",
LinkLocalIPv6PrefixLen:0,
MacAddress:"",
Networks:{
vikunja_default:{
Aliases:[
"vikunja",
"vikunja",
"128a8a5e84fa"
],
DriverOpts:null,
EndpointID:"b035465a2037667c338a619289f8d5a749c12343e499f3105ed616c38297b38f",
Gateway:"172.20.0.1",
GlobalIPv6Address:"",
GlobalIPv6PrefixLen:0,
IPAMConfig:null,
IPAddress:"172.20.0.3",
IPPrefixLen:16,
IPv6Gateway:"",
Links:null,
MacAddress:"02:42:ac:14:00:03",
NetworkID:"b8ff8cb3cc9445d81f4b7c073f335c4266480efdbf8dcde05079c68f45d557eb"
}
},
Ports:{
3456/tcp:[
{
HostIp:"0.0.0.0",
HostPort:"3456"
},
{
HostIp:"::",
HostPort:"3456"
}
]
},
SandboxID:"f774941ab77a441b1a0e767287dc99cbc7e1e5f893f5a7db45e53c51c8051f63",
SandboxKey:"/var/run/docker/netns/f774941ab77a",
SecondaryIPAddresses:null,
SecondaryIPv6Addresses:null
},
Path:"/app/vikunja/vikunja",
Platform:"linux",
Portainer:{
ResourceControl:{
Id:19,
ResourceId:"3_vikunja",
SubResourceIds:[
],
Type:6,
UserAccesses:[
],
TeamAccesses:[
],
Public:false,
AdministratorsOnly:true,
System:false
}
},
ProcessLabel:"",
ResolvConfPath:"/volume1/@docker/containers/128a8a5e84fa24a4aa4930f2a73aa433589b8b73d22ef85c8d6a30349001c56f/resolv.conf",
RestartCount:0,
State:{
Dead:false,
Error:"",
ExitCode:0,
FinishedAt:"0001-01-01T00:00:00Z",
OOMKilled:false,
Paused:false,
Pid:29524,
Restarting:false,
Running:true,
StartedAt:"2025-12-01T11:07:19.606940577Z",
Status:"running"
}
}
I guess I will give it up for the moment
@kolaente commented on GitHub (Dec 1, 2025):
The docker inspect tells you that the container communicates something on port 3456, not that the port is exposed to the host (that's a little confusing, but it's about how these images are built). You need to add something like
- 3456:3456to theportssection of your compose file to make port 3456 from the container available on your host.Check out the docker walkthrough or one of the compose examples in the doc for something that should work out of the box.