docker
글 7편, 메모 0개
Docker COPY와 빌드 컨텍스트 — 디렉토리 중첩
빌드 컨텍스트 루트에서 COPY . 를 하니 소스 디렉토리가 한 겹 더 중첩됐습니다. WORKDIR에는 package.json이 없고, 한 겹 아래에 있었습니다.
rootless Docker — br_netfilter 로드 실패
root 없이 Docker를 돌리려는데 데몬이 br_netfilter 커널 모듈을 못 올려서 죽었습니다. rootless는 bridge 네트워크를 안 쓰는데 기본 설정이 bridge를 요구합니다.
Ubuntu 24.04 베이스 이미지 — UID 1000 충돌
보안 점검으로 베이스 이미지를 24.04로 올렸더니 useradd가 실패했습니다. ubuntu:24.04엔 UID/GID 1000을 이미 차지한 기본 ubuntu 유저가 있어서, 관습적인 useradd -u 1000이 충돌합니다.
Docker 격리 규칙에 가려진 iptables ACCEPT — DOCKER-USER 체인
Docker를 최신으로 올린 뒤 컨테이너 포트가 외부에서 전부 타임아웃이었습니다. 직접 넣던 iptables ACCEPT 규칙이 Docker가 새로 추가한 격리 DROP 규칙에 가려져 있었고, DOCKER-USER 체인으로 옮겨 해결했습니다.
Docker 29에서 사라진 inspect 최상위 IPAddress 필드
Docker를 29로 올린 뒤 컨테이너 생성이 매번 롤백됐습니다. inspect 응답의 최상위 NetworkSettings.IPAddress 필드가 29부터 제거됐는데, 구버전 클라이언트는 이걸 에러가 아니라 빈 문자열로 받고 있었습니다.
Ubuntu 24.04 rootless Docker — nsenter와 netns
컨테이너로 작업을 돌리는 서버를 Ubuntu 24.04로 올린 뒤 컨테이너 접속이 깨졌습니다. apparmor의 userns 제한과 rootless docker의 detach-netns가 겹쳐서, nsenter가 엉뚱한 네임스페이스로 들어가고 있었습니다.
Prometheus 설정 리로드 실패 — 단일 파일 bind mount와 inode
prometheus.yml을 고치고 rsync로 올린 뒤 /-/reload를 불렀더니 200에 'reloaded successfully'까지 찍혔는데, 실제로는 옛날 설정이 그대로였습니다. 단일 파일 bind mount가 inode를 고정하고, rsync는 새 inode를 만들기 때문입니다.