尝试多种命令仍无法进入otel/opentelemetry-collector-contrib镜像终端怎么办?
解决无法进入otel/opentelemetry-collector-contrib:0.90.0容器终端的问题
这个镜像为了最小化体积,默认没预装任何shell(bash、ash、sh都没有),所以你之前试的docker exec调用shell的命令全部失效。可以用下面几种方案解决:
方案一:启动容器时直接挂载shell并进入
如果还没启动容器,可以启动时挂载官方alpine镜像的shell和依赖库,直接进入终端(此方式会替换容器默认启动命令,collector不会运行,适合临时调试镜像内容):
docker run -it --rm \ --volume /usr/bin/ash:/usr/bin/ash \ --volume /lib:/lib \ otel/opentelemetry-collector-contrib:0.90.0 \ /usr/bin/ash
方案二:给运行中的容器添加shell
如果容器已经在正常运行(要保留collector功能),可以从alpine镜像复制shell到容器里:
- 先确保容器在运行:
docker start otel-collector
- 临时创建一个alpine容器,复制所需文件:
docker create --name temp-alpine alpine:latest docker cp temp-alpine:/bin/ash otel-collector:/bin/ash docker cp temp-alpine:/lib/libc.musl-x86_64.so.1 otel-collector:/lib/libc.musl-x86_64.so.1 docker rm temp-alpine
- 现在就能正常进入终端了:
docker exec -it otel-collector /bin/ash
方案三:用nsenter直接进入容器命名空间(无需修改容器)
如果不想改动容器内容,可借助主机的nsenter工具进入容器的系统命名空间:
- 获取容器的进程ID:
PID=$(docker inspect -f '{{.State.Pid}}' otel-collector)
- 进入容器命名空间(主机需先装
util-linux包,比如Ubuntu用sudo apt install util-linux,CentOS用sudo yum install util-linux):
sudo nsenter -t $PID -m -u -i -n -p /bin/bash
内容的提问来源于stack exchange,提问作者Антон Итунин
相关产品推荐
相关产品推荐

