Вычисление метки времени в Docker-контейнере (работает в ECS) и передача в AWS CLI DynamoDB Put-Item - PullRequest
0 голосов
/ 02 июля 2019

Я нахожусь в разгар побочного проекта, который требует от меня передать временную отметку о завершении сборки (около этого) внутри контейнера Docker, работающего на AWS ECS Fargate, в таблицу DynamoDB.Что касается варианта использования, он служит своего рода журналом аудита для этой конкретной системы.

Я пытаюсь найти хороший способ передать метку времени в качестве ENV VAR и в операцию aws dynamodb put-item CLI.,Мой запрос CLI выглядит следующим образом: aws dynamodb put-item --table-name build-audit --item '{ "date": {"S": '\"$(DTG)\"'} }'

Ранее я пытался ENV DTG=$(date +%s), но получаю эту ошибку Syntax error - can't find = in "+%s)". Must be of the form: name=valuedockerfile-utils(33).

Я пытался запустить его как ENV DTG=date инесколько вариантов таких (date, $ (дата), дата с обратными галочками и т. д.), и они в конечном итоге будут переданы в виде буквенной строки в сравнении с фактической отметкой времени в моей таблице.

Затем я отключилсяделать что-то вроде этого

...docker stuff...
date > dtg.txt && \
aws dynamodb put-item --table-name build-audit --item '{ "date": {"S": '\"$(cat ./dtg.txt)\"'} }'

И я получаю ошибку аргумента с CLI (хотя запуск cat для файла сделает то, что я хотел, чтобы он делал), но я понятия не имею, как передатьэтот вывод в CLI.

Есть ли другой способ из Docker, который я могу сделать?

1 Ответ

0 голосов
/ 02 июля 2019

Надеемся, что этот пример поможет вам получить то, что вам нужно:

FROM busybox
ARG START
ENV STARTX=${START}
RUN echo ${START}
RUN echo ${STARTX}

Затем:

docker build \
--tag=example \
--build-arg=START=$(date +'%y%m%d') \
.
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM busybox
Step 2/5 : ARG START
Step 3/5 : ENV STARTX=${START}
Step 4/5 : RUN echo ${START}
190701
Step 5/5 : RUN echo ${STARTX}
190701
Successfully built a0f3f19bd9ad
Successfully tagged deleteme:latest

Предоставляется с помощью --build-arg и доступно в процессе сборки RUN echo ${START}

Поскольку и переменная среды назначается во время сборки (ENV STARTX=${START}), ${STARTX} также будет доступна внутри контейнера:

docker inspect example --format="{{.Config.Env}}"
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin STARTX=190701]

NB ARG START и ENV STARTX... чисто для ясности, но может иметь одно и то же имя.

...