如何访问分离模式运行的Docker容器内的NATS CLI
问题根因
默认拉取的官方nats镜像为distroless极简构建版本,镜像内没有打包任何shell环境(bash、sh均不存在),也没有预装NATS CLI工具,所有尝试进入shell、调用常规系统命令的操作都会触发可执行文件不存在的报错。
操作指引
方案1:使用带CLI的镜像变体重建容器(本地测试推荐)
官方提供了预装完整NATS CLI、带基础shell环境的alpine标签镜像,适合本地试用调试场景:
- 先删除当前创建的无shell容器:
docker rm -f my-nats
- 用alpine版本镜像重新启动服务:
docker run --name my-nats -p 4222:4222 -d nats:alpine
- CLI调用方式:
- 不需要进入容器,直接在宿主机执行容器内的nats命令即可,例如检查服务连接状态:
docker exec my-nats nats server check connection
- 需要连续执行多组CLI命令时,可以先进入容器内置的sh shell:
docker exec -ti my-nats sh
进入shell后直接输入nats即可唤起CLI工具,支持所有订阅、发布、服务管理操作。
方案2:保留现有运行容器,单独部署CLI客户端连接
如果不想中断当前运行的my-nats容器服务,可以单独启动临时的alpine版本NATS容器作为客户端,通过共享容器网络的方式连接现有服务,例如订阅test主题:
docker run --rm -ti --network container:my-nats nats:alpine nats sub test
将命令末尾的nats sub test替换为你需要执行的任意NATS CLI命令即可,执行完成后临时容器会自动销毁,不会残留冗余资源。
补充说明
默认的nats:latest镜像仅打包NATS服务核心二进制,做了极致的体积裁剪和攻击面收敛,仅适合不需要调试操作的生产部署场景。本地试用、需要频繁调用CLI操作的场景直接选用nats:alpine标签即可,镜像体积仅十余MB,不会产生额外的存储负担。
内容的提问来源于stack exchange,提问作者Yaya
相关产品推荐
相关产品推荐

