如何使用镜像名而非容器ID exec进入运行中的Docker容器
错误原因
docker exec 命令的目标参数要求是容器ID或容器名称,你传入的maps_web是镜像名称,自然会触发No such container报错。
解决方法
1. 用docker-compose exec(最适配你的场景)
你是通过docker-compose启动的服务,直接在docker-compose.yml所在目录执行即可,命令后接compose文件里定义的服务名称,不需要管容器自动生成的后缀:
docker-compose exec web sh
执行后会直接进入maps_web镜像对应的运行容器。
2. 原生docker命令通过镜像名筛选
如果需要用原生docker命令,可以结合过滤参数直接匹配对应镜像的运行容器:
docker exec -it $(docker ps -q --filter ancestor=maps_web) sh
说明:
docker ps -q仅输出运行中容器的ID--filter ancestor=maps_web过滤出所有用maps_web镜像启动的容器
同镜像启动多个容器时,这个命令只会匹配第一个返回的容器,需要定位特定容器可以额外加名称、端口等过滤规则。
3. 直接使用完整容器名
从你提供的运行容器列表可以看到,maps_web镜像对应的实际容器名称是maps_web_1,直接传入容器名即可:
docker exec -it maps_web_1 sh
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

