"docker service create"에서 docker/swarm 비밀 값을 환경 변수로 사용하는 방법은 무엇입니까?

"docker service create"에서 docker/swarm 비밀 값을 환경 변수로 사용하는 방법은 무엇입니까?

Docker Swarm 클러스터에서 서비스를 생성하는 스크립트를 작성해야 합니다. 예제 스크립트는 다음과 유사합니다.

docker service create \
    --name postgres \
    --mode global \
    --constraint "node.labels.postgres==master" \
    --network my-network \
    --env POSTGRES_USER="postgres" \
    --env POSTGRES_PASSWORD="****" \
    postgres:10

POSTGRES_USER 및 POSTGRES_PASSWORD 환경 변수는 docker secret에서 가져와야 합니다. 예를 들어:

echo "example_password" | docker secret create postgres-password -

나는 실행 중인 컨테이너 내부에서 비밀 정보에 파일로 액세스할 수 있다는 것을 이해합니다. 하지만 위의 예에서는 "service create" 명령에 환경 변수로 전달되어야 합니다. 이는 컨테이너의 진입점에서 사용되므로 컨테이너가 생성되기 전에 표시되어야 합니다. 그렇다면 "docker service create" 명령의 --env 스위치에 비밀을 어떻게 전달할 수 있습니까?

답변1

여기에 명시된 바와 같이https://github.com/docker-library/docs/blob/master/postgres/README.md다음과 같이 _FILE 접미사를 추가하면 postgres 서비스에서 떼 비밀을 사용할 수 있습니다.

docker service create \
    --name postgres \
    --mode global \
    --constraint "node.labels.postgres==master" \
    --network my-network \
    --secret "postgres-password" \
    --env POSTGRES_USER="postgres" \
    --env POSTGRES_PASSWORD_FILE="/run/secrets/postgres-password" \
    postgres:10 

어떤 서비스에 대한 일반적인 솔루션에 대해 묻는 경우 비밀번호를 일반 텍스트로 노출하는 컨테이너나 서비스를 만들지 않으면 불가능합니다(예: 비밀인 파일에서 비밀번호를 읽는 Nginx).

관련 정보