Bash автоматически получает идентификатор докера - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь запустить несколько команд докера на моем компьютере с Linux:

1- sudo docker load -i test.tar
2- sudo docker tag bf46cff9b182 test:v1.0
3- sudo docker run -it --network host -v /home/logs:/home/test/test/logs test:v1.0

Но я хотел бы сделать runme.sh и выполнить все за один запуск.Проблема в том, что ImageID bf46cff9b182 динамически меняется каждый раз.Так что мне нужно как-то pipe это из вывода команды load, что на самом деле возможно.

Вывод load выглядит так:

Loaded image ID: sha256:bf46cff9b1829b50e28f6485c923efff94799dd84cbf747dc86f6e5d006f2a81

В Linux это выглядит так:

4f512fb4b0ea: Loading layer  5.079MB/5.079MB
Loaded image ID: sha256:b6c3df68a9365ccb0935a835aa332b29db780cb7e81eac83acf717b2                                                                             de779073

А 12 символов после sha256 будет bf46cff9b182, что означает мой идентификатор изображения, вставленный в команду № 2 выше.

Как мне написать команду bash, чтобы сделать это автоматически?

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Вы можете сохранить идентификатор в переменной, которую вы можете использовать в следующей команде.

res=$(docker load ...)
id=${res:25:12}
docker tag $id ...

Получает подстроку со смещением 25 (надеюсь, я рассчитал правильно) с длиной 12

* 1005.* Edit: я узнал, вам даже не нужно sed, чтобы извлечь хеш "чистым" способом.
res=$(docker load ...)
hash=${res##*sha256:}
id=${hash:0:12}
docker tag $id ...
0 голосов
/ 07 февраля 2019

Вот простой sed скрипт для извлечения sha256.

docker load -i test.tar |
sed -n 's/^Loaded image ID: sha256:\([0-9a-f]*\).*/\1/p'

Теперь вы можете записать это в переменную или передать по конвейеру с помощью xargs:

docker load -i test.tar |
sed -n 's/^Loaded image ID: sha256:\([0-9a-f]*\).*/\1/p' |
xargs -i docker tag {} test:v1.0
0 голосов
/ 07 февраля 2019

Из Загрузка докера Документация:

Восстанавливает как изображения, так и теги.

Итак, вы можете просто использовать тег, который изображениепрежде чем делать сохранение Docker .

...