Dockerfile의 같은 ENV에서 A를 바꿔도 B는 이전 값을 읽는다
ENV A=new B=$A에서 B가 이전 A를 읽으면 이미지 Config.Env부터 확인한다. 같은 instruction의 치환 시점과 실행 시 덮어쓰기를 구분하고, 새 A에 의존하는 B 선언만 다음 ENV로 분리한다.
빌드노트
Docker·컨테이너 카테고리의 글입니다.
총 46개의 글
ENV A=new B=$A에서 B가 이전 A를 읽으면 이미지 Config.Env부터 확인한다. 같은 instruction의 치환 시점과 실행 시 덮어쓰기를 구분하고, 새 A에 의존하는 B 선언만 다음 ENV로 분리한다.
이전 빌드 단계의 WORKDIR에서 만든 파일을 COPY --from이 못 찾을 때, 소스 단계의 루트와 현재 단계의 상대 목적지를 구별한다. 소스 경로만 바꾼 실패·성공 빌드와 최종 파일 11바이트를 직접 비교했다.
개발용 Compose 파일에서 호스트 포트를 바꿔도 기존 포트가 남는 이유를 config로 확인한다. ports의 고유 키를 기준으로 병합 결과를 읽고, !override로 교체하거나 포트를 한 파일에서만 정의하는 방법을 실제 입력과 비교한다.
Compose의 짧은 depends_on은 서비스 준비까지 기다리지 않는다. 같은 지연 서버에서 연결 거절과 HTTP 200을 비교하고, healthcheck를 service_healthy 조건에 연결할 때와 로그에서 준비 시각을 확인하는 방법을 설명한다.
Docker의 unhealthy는 메인 프로세스 종료와 다르다. 같은 on-failure:2 정책에서 헬스체크만 실패한 컨테이너와 코드 7로 종료한 컨테이너를 비교하고, inspect의 PID·StartedAt·RestartCount로 실제 재시작 조건을 판단한다.
서비스 env_file에 값이 있는데 Compose 치환 결과가 비는 이유를 다룬다. 최소 설정에서 치환 입력·최종 설정·컨테이너 값을 비교하고, 중복된 environment 대입을 지울지 별도의 치환 입력을 줄지 판단한다. 미설정과 빈 문자열의 기본값 차이도 실제 관찰로 구분한다.
Dockerfile을 고르는 -f와 COPY 입력 범위를 정하는 마지막 빌드 경로를 구분한다. 같은 파일의 성공·not found 비교를 바탕으로 적용되는 ignore 파일을 찾고 필요한 경로만 허용하는 방법을 설명한다.
root여도 읽기 전용 rootfs에는 임시 파일을 만들 수 없다. HostConfig.ReadonlyRootfs와 두 마운트 설정을 확인하고, /tmp에만 tmpfs를 연결해 쓰기를 허용하면서 나머지 rootfs는 읽기 전용으로 유지하는 방법을 실제 비교로 설명한다.
docker cp에서 소스 폴더와 폴더/.는 기존 목적지에 서로 다른 트리를 만든다. 기존·신규 목적지의 실제 복사와 해시 비교로 차이를 확인하고, 같은 명령을 다시 실행할 때 하위 폴더가 생기는 이유와 복사 전 확인할 조건을 설명한다.
다른 폴더에서 Compose를 실행해도 ./config가 예상과 다른 곳을 가리킬 때, 기존 실행 옵션의 config source와 실제 컨테이너 Mounts.Source를 비교한다. 직접 관찰한 경로·파일 결과를 바탕으로 --project-directory로 기준을 명시할지 판단한다.
compose run은 서비스의 ports를 기본으로 생략한다. 실제 PortBindings와 내부·호스트 HTTP 응답을 비교하고, 호스트 접속이 필요한 작업에서만 --service-ports 또는 명시적 -p를 선택하는 방법을 설명한다.
Dockerfile의 첫 FROM 위 ARG는 이미지 선택에 쓰여도 RUN에 자동 전달되지 않는다. 단계 안에 ARG 이름을 다시 선언하는 전후 결과와 독립 단계의 범위를 비교하고, --build-arg와 ENV가 맡는 역할을 구별한다.