You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Unable to run denops with deno in a container #467
This is an ugly hack that only works because deno run and podman run share the same subcommand, normally I am using a shell script with podman args, this is just for ease of testing.
It seems that denops doesn't fully start, no commands are available, DenoHello is not either. All of it does work if I run deno outside of a container.
Screenshots (if need)
Your environment
OS: Linux 6.17.0-23-generic #23~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Apr 14 16:11:48 UTC 2 x86_64 x86_64 x86_64 GNU/Linux tried it also on different computers
Deno version: deno 2.7.14
Neovim version: v0.12.3-dev-78+g25b522a75d tried it also on stable
Thanks for the detailed report and reproduction steps.
From the debug log, it looks like the local denops server process is actually starting and listening successfully:
Server started: ...
Server listen: 127.0.0.1:36799
Channel connected (127.0.0.1:36799)
So this does not look like a simple failure to spawn deno inside the container, nor a basic networking issue.
The part that looks suspicious is that the channel closes immediately after connect, before denops becomes ready:
Channel connected (...)
Channel closed (...)
DenopsClosed
Looking at the startup flow, DenopsReady is only emitted after the worker
finishes its initialization. In other words, the failure seems to happen after
the socket connection is established, but before the worker reaches the DenopsSystemReady stage.
That suggests one of these is happening inside the containerized deno run ... cli.ts ... process:
worker initialization fails with an exception
host/service initialization fails
the worker exits immediately, which causes the channel to close from the Vim/Neovim side
Could you try collecting the stderr output from the containerized process more
explicitly? The most useful next step would be to capture any error printed by
the worker itself.
It would also help to try the same setup with slightly different podman run flags, for example:
-i
--rm
possibly explicit env/workdir settings such as -e HOME=$HOME and -w $HOME
At this point, my impression is:
process spawn: OK
TCP connect back to host: OK
denops worker becomes ready: NG
So the issue is likely in the worker/runtime environment inside the container rather than in the initial spawn step itself.
If you can provide the full stderr from the container side, that should make it much easier to identify the exact failure point.
If it's not there then it stops denops from working, but doesn't crash deno, which leads to this issue.
For my purpose I just created a small Containerfile and with that it works.
FROM ghcr.io/denoland/deno:alpine
RUN apk add git
I think to avoid this in the future either a clear message should be displayed if git is not found, or some other way of getting the version could be figured out, the git call seems fragile at best.
Activity
Shougo commentedon May 13, 2026
Thanks for the detailed report and reproduction steps.
From the debug log, it looks like the local denops server process is actually starting and listening successfully:
Server started: ...Server listen: 127.0.0.1:36799Channel connected (127.0.0.1:36799)So this does not look like a simple failure to spawn
denoinside the container, nor a basic networking issue.The part that looks suspicious is that the channel closes immediately after connect, before denops becomes ready:
Channel connected (...)Channel closed (...)DenopsClosedLooking at the startup flow,
DenopsReadyis only emitted after the workerfinishes its initialization. In other words, the failure seems to happen after
the socket connection is established, but before the worker reaches the
DenopsSystemReadystage.That suggests one of these is happening inside the containerized
deno run ... cli.ts ...process:Could you try collecting the stderr output from the containerized process more
explicitly? The most useful next step would be to capture any error printed by
the worker itself.
It would also help to try the same setup with slightly different
podman runflags, for example:-i--rm-e HOME=$HOMEand-w $HOMEAt this point, my impression is:
So the issue is likely in the worker/runtime environment inside the container rather than in the initial spawn step itself.
If you can provide the full stderr from the container side, that should make it much easier to identify the exact failure point.
Ashymad commentedon May 13, 2026
So I run denops separately to capture the stderr and found the issue. Denops need
gitcommand to be availabledenops.vim/denops/@denops-private/version.ts
Lines 10 to 16 in 1df7a02
If it's not there then it stops denops from working, but doesn't crash deno, which leads to this issue.
For my purpose I just created a small Containerfile and with that it works.
I think to avoid this in the future either a clear message should be displayed if git is not found, or some other way of getting the version could be figured out, the
gitcall seems fragile at best.Shougo commentedon May 14, 2026
@Ashymad Please test #468.
Ashymad commentedon May 14, 2026
@Shougo thank you very much for fixing this. Now it works without having to add git to the image.