【Docker 问题】Docker 与 Node.js 冲突问题

问题描述

今天在运行 docker 指令的时候,出现了这样的输出:

css 复制代码
Saved file tree to doc-filelist.js
Copied JS to doc-script.js
Compiled CSS to doc-style.css

首先想到的是通过指令来检查 Docker 有没有正确的工作:

bash 复制代码
systemctl status docker

输出显示 Docker 服务正常运行:

bash 复制代码
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: e>)
   Active: active (running) since Fri 2024-07-12 21:54:40 CST; 11h ago
   TriggeredBy: ● docker.socket
   Docs: https://docs.docker.com
   Main PID: 2833 (dockerd)
   Tasks: 306
   Memory: 147.7M (peak: 243.1M swap: 22.3M swap peak: 22.3M)
   CPU: 6min 47ms
   CGroup: /system.slice/docker.service
           ├─2833 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/cont>
           ├─3249 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-por>
           ├─3250 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-por>
           ├─3277 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 109>
           ├─3278 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 920>
           ├─3316 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-por>
           ├─3326 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 900>
           ├─3332 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-por>
           ├─3352 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 192>
           ├─3369 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-por>
           ├─3374 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 800>
           ├─3475 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-por>
           ├─3500 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 192>

然后尝试用绝对地址来指定使用 Docker:

bash 复制代码
/usr/bin/docker pull nezha123/titan-edge
/usr/bin/docker images

输出显示 Docker 正常工作:

bash 复制代码
Using default tag: latest
latest: Pulling from nezha123/titan-edge
Digest: sha256:5669cf5a88c91ce0d666d8d98fb1d8e601bcf6e096e39a0eadba4bae72d5a88e
Status: Image is up to date for nezha123/titan-edge:latest
docker.io/nezha123/titan-edge:latest
REPOSITORY                                  TAG       IMAGE ID       CREATED         SIZE
nezha123/titan-edge                         latest    488c7d20bfb2   7 days ago      571MB

回看上面的输出,觉得可能是 Node.js 的问题,因为不正确的输出看起来非常像是 docker.js 的输出,而不是 Docker 容器的相关输出。于是尝试卸载 docker.js:

bash 复制代码
npm uninstall -g docker

运行 docker 指令时出现以下错误:

bash 复制代码
bash: /root/.nvm/versions/node/v20.13.0/bin/docker: 没有那个文件或目录

现在问题就已经很清晰了,docker 指令被 nvm 识别,而不是被 Docker 识别。系统中安装了 nvm 用来管理 Node.js 的版本,现在最简单的方案就是切换一下 Node.js 的版本:

bash 复制代码
nvm use 22.1.0

然后再次运行 docker 指令:

bash 复制代码
docker images
docker ps -a

输出显示 Docker 正常工作:

bash 复制代码
REPOSITORY                                  TAG       IMAGE ID       CREATED         SIZE
nezha123/titan-edge                         latest    488c7d20bfb2   7 days ago      571MB

解决方案

既想要使用 Docker 又想要特定版本的 Node.js,这种情况可以在出问题的版本上清除所有与 Docker 相关的内容:

bash 复制代码
npm uninstall -g docker \
npm remove docker \
npm remove dockerjs \
npm remove docker.js \
npm remove dock \
npm remove doc \
npm remove docker.js 

需要非常注意!!!这种操作会将这个 Node.js 版本下的所有与 Docker 相关的内容全部删除掉:

bash 复制代码
nvm use 20.13.0
npm uninstall -g docker \
npm remove docker \
npm remove dockerjs \
npm remove docker.js \
npm remove dock \
npm remove doc \
npm remove docker.js 

再次运行这个指令,我们就可以看到在清除掉与 Docker 相关的内容以后,即使在出问题的版本上依旧可以正确使用 Docker 指令:

bash 复制代码
docker images
bash 复制代码
REPOSITORY                                  TAG       IMAGE ID       CREATED         SIZE
nezha123/titan-edge                         latest    488c7d20bfb2   7 days ago      571MB
相关推荐
孙克旭_1 天前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
java_logo2 天前
Docker 部署 EmulatorJS:轻松搭建浏览器复古游戏平台
游戏·docker·容器·复古游戏·轩辕镜像·emulatorjs·红白机
方便面不加香菜2 天前
Docker Container --容器及容器的操作案例详解
运维·docker·容器
无人生还别怕2 天前
如何搭建docker仓库(轻量级)registry
linux·运维·docker·云原生·容器·registry·openanolisos
YYYing.3 天前
【K8s系列 (一) 】Docker与容器(上篇)
docker·云原生·容器·kubernetes
csdn_aspnet3 天前
使用 Docker 和 RedisInsight 设置 Redis 以进行本地开发
redis·docker·容器·redisinsight
余槐i3 天前
MySQL 8.0 联合索引走错:为什么加了索引查询反而从 200ms 变成 8s
java·spring boot·mysql·docker·性能优化
csdn_aspnet3 天前
如何在本地 Docker 容器中运行 Redis,并使用 Redis Insight 和 Redis CLI 进行管理
redis·docker·容器
且从容.3 天前
Ubuntu 安装 Docker
linux·ubuntu·docker
todoitbo3 天前
我在 Mac 上用 Docker 部署 Nexent:从拉取镜像到接入模型
macos·docker·大模型·ai智能体·nexent·快速入门与环境准备