所以我试图运行以下shell脚本,它需要动态容器的容器ID /名称(运行脚本)。
一种方法可能是 docker ps ,然后获取容器ID,但这不是动态的。
有没有办法动态地做到这一点?
#!/bin/bash
docker exec <container id/name> /bin/bash -c "useradd -m <username> -p <password>"
答案 0 :(得分:5)
使用--name选项运行时,可以为容器指定一个特定名称。
docker run --name mycontainer ...
然后你的exec命令可以使用指定的名称:
docker exec -it mycontainer ...
答案 1 :(得分:1)
您可以启动容器并将容器ID存储在变量中,如下所示:
container_id=$(docker run -it --rm --detach busybox)
然后,您可以像这样在docker exec
命令中使用容器ID:
docker exec $container_id ls -la
或
docker stop $container_id
注意:本文的主题是如何将服务器/容器视为cattle and not pets
,而不是为容器使用(唯一的)名称,而是使用ID。答案 2 :(得分:0)
我刚刚想出了一种可行的方法。我经常用bash进入我的容器,但是每次这样做,我都必须查找正在运行的容器的ID-这很麻烦。我这样使用--filter
命令:
docker ps -q --filter="NAME={name of container}"
然后输出的唯一内容是容器的ID,它使我可以运行:
docker exec -it $(docker ps -q --filter="NAME={name of container}") bash
这是我在这种情况下真正想做的。
您可以按
进行过滤id, name, label, exited, status, ancestor,
beforesince, volume, network, publishexpose,
health,isolation, or is-task
过滤器的文档为here。希望能对某人有所帮助。