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).