많은 bash 질문과 마찬가지로 답변이 있다고 100% 확신하지만 인터넷 검색은 어렵습니다.
나는 다음을 이해하려고 노력하고 있습니다스크립트:
#!/bin/bash
# available options
export OPX_GIT_TAG="${OPX_GIT_TAG:-no}"
# package distribution
export OPX_RELEASE="${OPX_RELEASE:-unstable}"
# currently tracked release
export DIST="${DIST:-stretch}"
export ARCH="${ARCH:-amd64}"
export CUSTOM_SOURCES="${CUSTOM_SOURCES:-}"
# docker image name
IMAGE="opxhub/build"
# docker image tag
VERSION="${VERSION:-latest}"
interactive="-i"
if [ -t 1 ]; then
# STDOUT is attached to TTY
interactive="-it"
fi
read -d '' opx_docker_command <<- EOF
docker run
--rm
--name ${USER}_$(basename $PWD)_$$
--privileged
-e LOCAL_UID=$(id -u ${USER})
-e LOCAL_GID=$(id -g ${USER})
-v ${PWD}:/mnt
-v $HOME/.gitconfig:/home/opx/.gitconfig
-v /etc/localtime:/etc/localtime:ro
-e ARCH
-e DIST
-e OPX_RELEASE
-e OPX_GIT_TAG
-e CUSTOM_SOURCES
${interactive}
${IMAGE}:${VERSION}
EOF
if [[ $# -gt 0 ]]; then
# run command directly
# not using bash because tar fails to complete
# root cause unknown (see opx_rel_pkgasm.py:tar_in)
$opx_docker_command sh -l -c "$*"
else
# launch interactive shell
# using bash here because tar does not fail in an interactive shell
$opx_docker_command bash -l
fi
docker-run
명령을 생성하는 방법, 특히 , 등에 대한 부분 이 혼란스럽습니다. 괄호로 묶어야 하지 않나요? 그렇지 않은 경우 이러한 변수는 어떻게 전달됩니까?ARCH
DIST
OPX_RELEASE
${}
답변1
자세히 살펴보면 이러한 변수의 사용이 명령 -e
의 옵션 내에 있음을 알 수 있습니다 docker-run
. 이 옵션은 컨테이너에서 환경 변수를 사용할 수 있도록 하는 데 사용됩니다.
따라서 여기서 스크립트는 다음을 지정합니다.이름값 자체가 아니라 컨테이너에 전달되어야 하는 환경 변수의 값입니다(올바르게 지적한 것처럼 $ARCH
또는 에서 와 같이 역참조해야 합니다 ${ARCH}
).
당신은 볼 수 있습니다도커 문서추가 읽기를 위해.