Dockerfile 또는 Shell에서 yaml 파일을 편집하는 방법은 무엇입니까?

Dockerfile 또는 Shell에서 yaml 파일을 편집하는 방법은 무엇입니까?

Dockerfile에서 컬의 구성 파일을 업로드한 후 일부 편집이 필요합니다. 다음은 예제 구조입니다.

client:
  ...
server:
  applicationConnectors:
  - type: http
    port: 8989
    # for security reasons bind to localhost
    bindHost: localhost
  requestLog:
      appenders: []
  adminConnectors:
  - type: http
    port: 8990
    bindHost: localhost

이 두 매개변수를 편집해야 하는데 bindHost, 해당 기간 동안 해당 값을 매개변수로 전달할 수 있으면 좋을 것 같은데 docker build, 인터넷이나 문서에서 아무것도 찾을 수 없는 것 같습니다.

답변1

질문을 올바르게 이해했다면 Dockerfile 명령에서 컬을 sed로 파이프하십시오.

curl XXX | sed -e "s/bindHost: localhost/bindHost: ${your_variable}/g" > yourfile.yaml

또는 파일을 다운로드한 후 편집할 수 있습니다.

sed -ie "s/bindHost: localhost/bindHost: ${your_variable}/g" /path/to/your/file

답변2

"--build-arg"를 사용하여 Dockerfile에 값을 전달하고 해당 값을 호출에 사용할 수 있습니다. RUN sed예를 들어 IP 주소 매개변수를 삽입합니다.

FROM whatever

COPY config.file /etc/config.file
ARG IPADDR
RUN sed -i -r "s/#IPADDR#/$IPADDR/g" /etc/config.file

다음을 사용하여 빌드할 수 있습니다.

docker build -t foobar --build-arg IPADDR=11.12.13.14 .

빌드 매개변수를 런타임 환경 변수로 변환할 수도 있습니다.

ARG ARGVAR
ENV ENVVAR $ARGVAR

구성 구문을 실행하지 않고 환경 변수 대체를 수행할 수 있다면 더 좋을 것입니다 sed.

그러나 이는 이미지를 너무 구체적으로 만듭니다. 컨테이너를 시작할 때( , docker run사용 ) 환경 변수를 설정하고 해당 값을 사용하여 구성 구문이 아닌 한 스크립트에서 구성 파일을 컨테이너 항목으로 즉시 편집할 수 있습니다. (또는 실행 매개변수) Envvar 대체가 가능합니다.--env--env-list

관련 정보