如何使用镜像名称(而不是容器 ID)执行 Docker 容器?

问题描述 投票:0回答:3

我正在使用以下版本的 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 docker-container docker-exec
3个回答
1
投票

这是上面评论中

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
为前缀(它将使用它找到的第一个)。

更新:如果您尝试运行的命令引起问题,您可以删除它周围的引号。


0
投票

DOCKER_IMAGE_NAME=mydockerimagename

docker exec -it $(docker ps -aqf "ancestor=$DOCKER_IMAGE_NAME"| head -n 1) /bin/bash


0
投票

如果您只运行一个容器,这将有效:

docker exec -it $(docker ps --format '{{.Names}}') /bin/sh

如果您正在运行多个,则应将 -f... 添加到内部 docker ps 命令中。

© www.soinside.com 2019 - 2024. All rights reserved.