簡體   English   中英

Bash腳本進入正在運行的容器,然后從該容器運行另一個bash腳本

[英]Bash script to get into a running container and then run another bash script from that container

我有一個運行如下的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 OS運行此程序時,我希望實際上輸入postgres容器,它是一個正在運行的容器。 但是問題在於,shell腳本在“ docker exec”步驟期間掛在第三行。

我的最終目標是使用bash腳本,輸入一個正在運行的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

我不確定您的腳本正在掛起,而不是坐在那里等待輸入。 嘗試直接運行命令

使用命名

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM