Docker 컨테이너에 사용자 정의 환경 변수를 전달할 수 있을까요?

GitHub - googleapis/google-auth-library-ruby: Google Auth Library for Ruby · GitHub 와 같은 일부 클라이언트 라이브러리는 인증 자격 증명을 환경 변수로 설정해야 합니다. yml 파일을 통해 이를 전달할 수 있을까요?

다음과 시도해 보았습니다.

  1. yml 파일의 커스텀 명령 섹션에 export VAR=VALUE 추가.
  2. yml의 env 섹션에 VARIABLE: VALUE 추가.

@merefield 님이 실제로 가능하다고 알려주셨습니다.

커스텀 커맨드 섹션에서 다음을 수행하세요.

# 변수를 .bashrc 파일에 추가합니다
exec: echo 'export VAR=value' >> ~/.bashrc
...
# 파일을 다시 로드합니다 
exec: source ~/.bashrc

이 방식이 실제로 작동한다는 것을 확인했습니다. :slight_smile:

p.s.
어떤 이유로 source ~/.bashrc가 환경을 업데이트하지 않습니다. 너무 일찍 호출되고 있는 것 같습니다.

또한 다음도 시도해 보았지만,
- exec: /bin/bash -c "source ~/.bashrc"

컨테이너 정의의 env: 섹션을 이 용도로 사용할 수 있지 않나요? 그러면 Rails 앱이 접근할 수 있는 환경 변수가 생성되어야 합니다.

예를 들어

env:
  CUSTOM_ENV: "value"

그렇지 않으면 pups가 이미 호스트의 환경 변수를 파이프 처리하고 있는 것 같습니다.

그렇게 하면 docker 관련 오류가 발생합니다. 그렇게 작동한다면 매우 직관적이었을 텐데 말이죠. :slight_smile: 아니면 제가 미친 건지도 모르겠네요. DISCOURSE_로 시작하는 사용자 정의 변수를 허용하는 규칙이 있는 것 같습니다.

내일 책상 앞에 앉으면 env 관련해서 한 번 더 시도해 볼게.

아, 제가 미쳤었네요. 지금은 잘 작동합니다. 문제는 여러 줄 값 때문에 발생했었어요. 해당 값을 제거하니 빌드가 성공했습니다. 그런데 여러 줄 값을 어떻게 사용해야 할까요?

오, 결국 해결했어요. 문제는 RSA 개인 키를 환경 변수로 사용하던 것이었거든요. 이렇게 하면 작동합니다.

키를 싱글쿼트 '로 감싸고, 키에 포함된 모든 \n 앞에 \를 하나 더 추가하세요. 즉, \n은 \\n이 됩니다.

참고로, 모든 \n을 직접 수정하는 것보다 더 쉬운 방법이 있습니다.

아래와 같은 방식으로 작성할 수 있습니다:

key: |
  ---BEGIN SECRET KEY---
  SHH do not read this is secret
  ---END SECRET KEY---

키의 중간 부분을 그대로 붙여넣으라는 말씀인가요? 그렇게 하는 것이 좀 더 깔끔할 것 같습니다.

즉, | 문자(그리고 선택적 변형)로 시작하면 yml 파일에서 멀티라인을 지원한다는 뜻입니다.

이렇게 하면 접두 공백을 제외하고 키를 그대로 붙여넣을 수 있습니다.

나는 좀 멍청한 시도를 해 보았습니다. 각 \n 대신 |와 실제 줄바꿈을 추가했는데, 작동하지 않았습니다.