Backend/프로젝트

[에러 해결] docker compose 실행 시 Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'

동구름이 2024. 5. 9. 22:07

Docker compose 실행 중 다음과 같은 오류를 만났습니다.

 

docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'

더보기

전체 에러 코드

$ sudo docker-compose up -d
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 214, in _retrieve_server_version
    return self.version(api_version=False)["ApiVersion"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/daemon.py", line 181, in version
    return self._result(self._get(url), json=True)
                        ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/utils/decorators.py", line 46, in inner
    return f(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 237, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 602, in get
    return self.request("GET", url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 486, in send
    resp = conn.urlopen(
           ^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 791, in urlopen
    response = self._make_request(
               ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 497, in _make_request
    conn.request(
TypeError: HTTPConnection.request() got an unexpected keyword argument 'chunked'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 200, in perform_command
    project = project_from_options('.', options)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 60, in project_from_options
    return get_project(
           ^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 152, in get_project
    client = get_client(
             ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 41, in get_client
    client = docker_client(
             ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 170, in docker_client
    client = APIClient(use_ssh_client=not use_paramiko_ssh, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 197, in __init__
    self._version = self._retrieve_server_version()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 221, in _retrieve_server_version
    raise DockerException(
docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'

 

 

결론부터 말하면 저의 경우는 Docker와 Docker-compose 간 버전 호환의 문제였습니다.

 

 

 

 

여러 구글링을 해보니 세 가지 방법 중 한 가지의 문제일 가능성이 큽니다.

 

 

 

1. Docker가 실행되어있지 않은 경우

이 경우에는 다음과 같은 방법으로 해결할 수 있습니다.

 

1. docker 가 실행 중인지 확인

$ sudo systemctl status docker

 

2. 실행 중이 아니라면, 도커 실행

$ systemctl start docker

 

 

 

docker.errors.DockerException: Error while fetching server API version

I want to install this module but there is something wrong when I try the step docker-compose build ... I tried to update the Docker version and restart Docker many times. But it didn't work. git c...

stackoverflow.com

 

 

 

2. docker-compose와 docker 의 버전이 호환되지 않는 경우

저는 이 경우에 해당했습니다.

 

우선 각각의 버전을 확인합니다.

$ docker -v
$ docker-compose -v

 

 

 버전을 확인한 뒤 도커 공식 문서를 찾아보니, docker-compose 1.29.2 버전은 페이지를 한참 넘겨야 찾을 수 있는... 유물 버전이었습니다. 

 

 

 

Docker Compose release notes

Learn about the new features, bug fixes, and breaking changes for the newest Docker Compose release

docs.docker.com

 그리고 도커 공식 문서의 릴리즈 노트 기록을 참고했을 때, docker와 docker compose의 버전 의존성을 확인해볼 수 있었습니다. 

 

 

 실제로 저의 에러 코드를 분석하면, 오류 메시지에서 Docker API와의 통신 중에 HTTPConnection.request() 함수에서 예기치 않은 키워드 인수 'chunked'를 받았다는 것을 알 수 있습니다. Docker와 Docker-compose 각각의 버전이 호환되지 않아 Docker compose가 모르는 인수를 받아 문제가 생기는 것이었습니다.

 

 이것은 docker-compose를 업데이트 해줌으로써 해결할 수 있었습니다.

 

1. 기존 도커 제거

$ sudo apt-get remove docker-compose -y

 

2. jq 라이브러리 설치

$ sudo apt install jq

 

3. docker-compose 최신 버전 설치

$ VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)

$ DESTINATION=/usr/bin/docker-compose

$ sudo curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION

$ sudo chmod 755 $DESTINATION

$ docker-compose -v

 

 

 

 

3. docker-compose.yml 실수

yml 파일을 잘못 적어 오류가 발생할 수도 있다고 합니다.

 

yml 파일을 작성할 때 주의해야할 점은 아래와 같습니다.

1. 첫 줄에는 도커 컴포즈 버전을 적는다.
2. 주 항목에는 services, networks, volumes가 있고, 들여쓰기를 해서 하위 항목들을 작성한다.
3. 들여쓰기는 몇 칸이든 상관은 없지만, 2칸으로 하기로 했으면 모든 내용들이 2칸으로 동일해야한다.
4. 이름 뒤에는 무조건 : 를 붙인다.
5. : 과 - 뒤에는 반드시 공백이 하나 있어야한다.

 

 

 

 

참고자료

https://cjwoov.tistory.com/98
 
https://docs.docker.com/compose/release-notes/

https://stackoverflow.com/questions/64952238/docker-errors-dockerexception-error-while-fetching-server-api-version