[英]How do I exec into a docker container using its image name (as opposed to container ID)?
我正在使用以下版本的 Docker
$ docker -v
Docker version 20.10.7, build f0df350
当我使用“docker-compose up”启动我的容器时,我可以看到它们都出现了
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29e94e032fbb maps_apache "httpd-foreground" 2 minutes ago Up 2 minutes 0.0.0.0:9090->80/tcp, :::9090->80/tcp maps_apache_1
13a8f2f037e4 maps_client "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3001->3000/tcp, :::3001->3000/tcp web-app
318dff5311a2 maps_web "bash /my-app/entryp…" 2 minutes ago Up 2 minutes 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp maps_web_1
b4a6914cc67a postgres:10.5 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:5105->5432/tcp, :::5105->5432/tcp maps_postgres_1
我想使用可读的图像名称执行到我的 docker 容器中,所以我尝试了这个
$ docker exec -it maps_web sh
Error: No such container: maps_web
使用图像名称(而不是容器 ID)执行 docker 的正确方法是什么?
这是上面评论中docker-compose
建议的替代方法。
docker exec -it $(docker ps -aqf "name=maps_web_1") "sh"
$(docker ps -aqf "name=maps_web_1")
通过搜索名称获取容器 ID(根据运行docker ps
时最右侧列中的条目)。
您可以使用更具体的正则表达式模式,例如"name=maps_web.*"
。 这里需要注意的是,如果您不小心,这可能会返回多个容器 ID,或者根本不会返回任何容器 ID。
在您的情况下, $(docker ps -aqf "name=maps_web")
实际上可以工作,因为没有其他容器名称以maps_web
为前缀(它将使用它找到的第一个)。
更新:如果它导致问题,您可以删除您尝试运行的命令周围的引号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.