Bash脚本进入正在运行的容器,然后从该容器运行另一个bash脚本

我有一个shell脚本运行如下:

image_id=$(docker ps -a | grep postgres | awk -F' ' '{print $1}') full_id=$(docker ps -a --no-trunc -q | grep $image_id) docker exec -i -t $full_id bash 

当我从基本的Linux操作系统运行这个,我期望实际上进入postgres容器,这是一个正在运行的容器。 但问题是shell脚本在“docker exec”步骤中挂在第三行。

我的最终目标是使用bash脚本,input一个正在运行的postgres容器,并在该容器中运行另一个bash脚本。 但是,当我从命令行运行它相同的命令,它工作正常,让我进入postgres容器。

请帮忙,我花了几个小时来解决这个问题,但没有进展。

再次感谢

你的设置比需要的复杂一点。

Docker ps可以直接使用--filter=选项来过滤容器

 docker ps --no-trunc --quiet --filter="ancestor=postgres" 

您也可以 – 在运行容器时--name容器,与您尝试的脚本相比,容器的危险性更低

 docker run --detach --name postgres_whatever postgres docker exec -ti postgres_whatever bash 

我不确定你的脚本是否挂起,而不是坐在那里等待input。 尝试直接运行一个命令

使用命名

exec_test.sh

 #!/usr/bin/env bash docker exec postgres_whatever echo "I have run the test" 

运行时

 $ ./exec_test.sh I have run the test 

没有命名

exec_filter_test.sh

 #!/usr/bin/env bash id=$(docker ps --no-trunc --quiet --filter="ancestor=postgres") [ -z "$id" ] && echo "no id" && exit 1 docker exec "${id}" echo "I have run the test" 

运行时

 $ ./exec_filter_test.sh I have run the test