🐳 .env → docker-compose 환경 변수
.env 파일 내용을 붙여넣으면 docker-compose.yml의 environment 블록으로 변환. 리스트/딕셔너리 형식 모두 지원.
⚠️ 시크릿 경고
아래 키는 민감 정보일 수 있습니다. docker-compose.yml에 직접 쓰지 말고 ${VAR} 참조로 .env에서 로드하세요.
🔗 관련 도구
📖 자주 걸리는 지점
.env 형식의 텍스트를 docker-compose.yml 의 environment 블록(리스트 형식 / 사전 형식)으로 변환합니다. 기밀로 보이는 키의 경고와 ${VAR} 참조로의 치환에도 대응하며 처리는 브라우저 안에서 끝납니다. 이 도구의 본론은 서식 변환이 아니라 변환한 결과를 어디에 두느냐입니다 — docker-compose.yml 은 Git 에 들어가는 파일이므로 값을 그대로 옮겨 적으면 그 시점에 비밀이 아니게 됩니다.
| 사례 | 무슨 일이 일어나는가 | 어떻게 하면 되는가 |
|---|---|---|
| API 키를 docker-compose.yml 에 직접 써 버린다 | docker-compose.yml 은 거의 확실히 저장소에 커밋되는 파일입니다. 여기에 진짜 키를 쓴 시점에 팀 전원, CI, 포크한 사람, 저장소를 클론한 전원이 그것을 읽을 수 있습니다. 더 심각한 것은 Git 의 이력에 영구히 남는다는 점으로 나중에 git rm 해도 과거의 커밋에는 계속 남습니다. 공개 저장소의 경우 GitHub 에 푸시한 순간부터 몇 분 이내에 자동 스캔됩니다 — 바로 지웠으니 괜찮다는 성립하지 않습니다. |
이 페이지의 ${VAR} 참조로 변환을 켜세요 — DB_PASSWORD=${DB_PASSWORD} 처럼 쓰면 compose 가 같은 디렉터리의 .env 에서 실제 값을 읽습니다(.env 는 .gitignore 에 넣습니다). 애초에 env_file: .env 라고 쓰면 키의 목록조차 compose 파일에 쓰지 않아도 됩니다. 이미 커밋해 버린 경우 이력의 재작성은 대처가 되지 않습니다 — 포크 · 캐시 · CI 의 로그 · 남의 로컬 클론에 남기 때문입니다. 유일하게 올바른 대처는 그 키를 무효화하고 새것을 발행하는 것입니다. 알아챈 시점에 바로 하세요. |
| 값의 따옴표나 이스케이프가 기대대로 되지 않는다 | .env 와 YAML 은 따옴표의 규칙이 다릅니다. .env 의 FOO="bar baz" 의 따옴표는 셸 유래의 표기이며 Docker Compose 의 버전에 따라서는 따옴표째 리터럴로 다뤄져 값에 " 가 포함되어 버립니다. 반대로 YAML 쪽에서는 값에 : 나 # 나 { 가 포함되면 따옴표가 필수입니다 — URL: http://x:8080 은 콜론 때문에 깨집니다. 또 하나, .env 는 줄바꿈을 포함하는 값을 표현할 수 없습니다 — 비밀 키나 인증서를 넣으려 하면 반드시 여기서 막힙니다. |
값에 공백 · : · # · { 가 포함된다면 YAML 쪽에서는 반드시 따옴표를 붙이세요 — 이 도구는 자동으로 판단하지만 손으로 편집한 뒤에는 docker compose config 를 실행해 해석된 결과를 확인하세요. 이 명령은 변수의 전개까지 마친 최종형을 출력하므로 의도대로인지가 한눈에 보입니다. 줄바꿈을 포함하는 값은 Base64 로 만들어 한 줄로 넘기는 것이 정석입니다(앱 쪽에서 디코드합니다) — 또는 애초에 환경 변수가 아니라 Docker 의 secret 이나 볼륨 마운트로 파일로서 넘기세요. 인증서나 키는 환경 변수에 넣을 것이 아닙니다. |
| 변수가 전개되지 않는다 · 오래된 값이 들어간다 | .env 안에서의 상호 참조는 전개되지 않습니다. HOST=example.com 의 다음 줄에 URL=http://$HOST/api 라고 써도 URL 의 값은 문자 그대로 http://$HOST/api 가 됩니다 — compose 가 ${VAR} 를 전개하는 것은 compose 파일 안에서만이고 .env 는 그저 키와 값의 목록으로 읽히기 때문입니다. 오래된 값이 들어간다 쪽의 원인은 우선순위입니다 — 같은 변수가 여러 곳에 있을 때 environment: 가 env_file: 보다 강하고 env_file: 이 .env 보다 강하므로 .env 를 고쳤는데 environment: 에 오래된 값이 남아 있으면 그쪽이 이깁니다. |
먼저 docker compose config 를 실행하세요 — 모든 해결을 마친 최종적인 설정이 출력되므로 어느 값이 채택되었는지가 확실히 보입니다. 이것을 보지 않고 .env 와 compose 파일을 오가며 고치려 하면 반드시 시간을 잃습니다. 값의 조립이 필요한 경우($HOST 에서 $URL 을 만드는 등)는 컨테이너의 엔트리포인트 스크립트 안에서 하세요 — 그곳은 평범한 셸이므로 전개할 수 있습니다. 환경 변수의 값으로 $ 그 자체를 넘기고 싶을 때는 $$ 라고 씁니다 — 비밀번호에 $ 가 포함되어 있으면 이를 모르는 동안은 원인을 알 수 없습니다. |
.env 를 저장소에 두지 마세요. 대신 .env.example 을 두고 키 이름만 열거하고 값은 비워 둡니다 — 새로 합류한 사람이 무엇을 설정해야 할지 알 수 있고 값 자체는 새지 않습니다. .gitignore 에는 .env 를, 다만 !.env.example 예외도 잊지 말고 쓰세요. 한 가지 더, 환경 변수는 컨테이너 안에서 docker inspect 나 /proc/1/environ 으로 읽을 수 있습니다 — 즉 그 컨테이너에 들어갈 수 있는 사람에게는 전부 보입니다. 프로덕션의 중요한 비밀은 환경 변수가 아니라 Docker Swarm 의 secret 이나 Kubernetes 의 Secret(나아가 외부의 Vault)으로 파일로서 마운트하는 것이 바람직한 형태입니다. 환경 변수는 비밀을 안전하게 지키는 구조가 아니라 비밀을 코드에서 분리하는 구조라고 이해해 두세요 — 이 둘은 다른 것입니다.
📖 사용법
-
1
.env 붙여넣기왼쪽 입력란에 .env 내용을 붙여넣으세요. #로 시작하는 줄은 주석으로 처리됩니다.
-
2
출력 형식 선택리스트 또는 딕셔너리 형식을 선택하고, 필요하면 시크릿을 ${VAR} 참조로 변환합니다.
-
3
결과 복사오른쪽에 변환 결과가 표시됩니다. 복사하여 docker-compose.yml의 environment 아래에 붙여넣으세요.
❓ 자주 묻는 질문
어떤 키에서 시크릿 경고가 발생하나요?
따옴표와 이스케이프는 어떻게 처리되나요?
$OTHER 같은 변수 확장도 지원하나요?
🐛 이 도구에서 문제가 발생했나요?
무료 · 가입 불필요. 재현 절차만이라도 도움이 됩니다. 보고는 운영자에게 직접 전달되어 개선에 사용됩니다.
보고 감사합니다!
운영자에게 전달되었습니다. 개선에 사용됩니다.