오늘은 private 한 환경에서 별도로 Docker registry를 구성했을 때
종종 발생하는 오류인 http server gave http response to https client의 해결 방법에 대해
포스팅 하려고 합니다.
일반적으로 docker registry는 docker hub를 사용할 수 있지만,
다운로드 횟수 제한, 리소스 제한, 인터넷이 안 되는 환경 등의 이유로
운영환경에서는 별도로 docker registry를 구축해야 합니다.
docker registry를 구축한 서버에서 push & pull을 할 때는 문제없이 사용할 수 있지만,
별도로 서버를 두고 원격 서버에서 push & pull을 하게 되는 경우에
http server gave http response to https client 오류가 발생할 수 있습니다.
docker는 보안상의 이유로 ssl 인증을 하는 https를 기본적으로 사용하고 있습니다.
이를 단순히 http형태로 연결하기 위해서는 설정들을 수정해주어야 합니다.
docker registry를 push & pull은 docker 와 containerd가 가능하며
kubernetes를 사용하던 중에 발생한 에러라면 container-runtime을 먼저 확인하셔야 합니다.
각각의 해결 방법을 다음과 같이 포스팅 하겠습니다.
1) docker
image를 push & pull 하려는 client에서 daemon.json을 수정을 하고 재기동합니다.
$ vi /etc/docker/daemon.json
{
...
"insecure-registries": ["192.168.33.45:5000"],
...
}
$ systemctl restart docker
2) containerd
image를 push & pull 하려는 client에서 config.toml을 수정을 하고 재기동합니다.
config.toml은 버전별로 설정이 상이할 수 있습니다.
registry.configs와 registry.mirrors를 각각 검색하여 하위에 추가하면 됩니다.
$ vi /etc/containerd/config.toml
...
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.33.45:5000".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.33.45:5000"]
endpoint = ["http://192.168.33.45:5000"]
...
$ systemctl restart containerd
각각의 설정이 끝났다면 push & pull을 테스트해보시면 됩니다.
[TEST]
# docker case
docker pull 192.168.33.45:5000/{image_name}
# containerd case
crictl pull 192.168.33.45:5000/{image_name}
지금까지 Docker private registry http server gave http response to https client
해결 방법에 대한 포스팅이었습니다.
'Develope > Docker' 카테고리의 다른 글
[Docker] insecure-registry 설정 하는 방법 (for windows) (0) | 2023.11.07 |
---|