如何修复VSCode远程容器终端/usr/sbin/nologin启动失败(退出码1)错误
问题表现
Windows系统运行VSCode连接远程容器时,启动容器内集成终端返回报错:
终端进程"/usr/sbin/nologin"启动失败(退出代码: 1)。
手动执行docker exec命令可正常进入容器启动bash终端,仅VSCode集成终端无法正常拉起。
故障根因
VSCode连接远程容器时,默认使用容器内配置的对应用户的登录shell启动终端,当该用户的默认shell被设置为/usr/sbin/nologin(非交互式shell,本身禁止登录操作)时,就会触发启动失败。手动执行docker exec时默认使用root用户或显式指定了bash shell,因此不会触发该问题。
解决方法
二选一即可:
方法1:修改VSCode容器远程侧终端配置(无需改动容器内部配置)
- 保持VSCode与远程容器的连接状态,按下
Ctrl+Shift+P调出命令面板,搜索并选择首选项: 打开远程设置(容器),注意不要选成本机Windows的用户设置/工作区设置 - 在设置页搜索
terminal.integrated.defaultProfile.linux,将默认值修改为bash(容器内安装了zsh/fish等其他shell也可对应选择) - 如果图形化设置不生效,可直接点击设置页右上角的打开settings.json按钮,添加如下配置:
"terminal.integrated.defaultProfile.linux": "bash", "terminal.integrated.profiles.linux": { "bash": { "path": "/bin/bash", "args": ["-l"] } }
- 按下
Ctrl+Shift+P搜索Developer: Reload Window重载窗口,重新打开终端即可正常使用。
方法2:修改容器内用户的默认登录shell(一劳永逸,后续重连容器无需重复改VSCode配置)
- 本地终端执行
docker exec -it <你的容器ID或容器名> bash进入容器 - 执行
cat /etc/passwd | grep vscode查看VSCode连接容器默认使用的vscode用户配置,输出内容末尾如果是/usr/sbin/nologin即可确认是该问题 - 执行如下命令修改vscode用户的默认shell为bash:
# 容器内置chsh命令时用这个 chsh -s /bin/bash vscode # 若容器内没有chsh命令,换用这个 usermod -s /bin/bash vscode
- 断开VSCode与容器的连接后重新连接,打开集成终端即可正常启动。
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

