[ERROR] Docker failed to solve: error getting credentials - err: exit status 1, out: “

HandMK·2024년 9월 10일

ERROR

목록 보기
2/3
post-thumbnail

💻 개발 환경
OS : macOS Sonoma 14.5
배포 서버 OS : Ubuntu

🤔 왜 발생했는가?

Dockerfile

# Nginx 설정
FROM nginx:stable-alpine

ENV REACT_APP_API_URL=/api/

# 로컬에서 빌드된 React 앱을 Nginx에 복사
COPY ./build /usr/share/nginx/html

# Nginx 설정 파일 추가
COPY nginx.conf /etc/nginx/conf.d/default.conf

CMD ["nginx", "-g", "daemon off;"]

로컬에서 프로젝트 개발을 끝내서 도커로 이미지 빌드를 할 때 Mac 환경에서는 플랫폼 옵션 없이 빌드 하게 되면 linux/arm64 platform 으로 생성된다. 그렇기 때문에, 배포 서버 OS 가 Ubuntu 서버 일 때 linux/amd64 platform 이기 때문에 아래와 같이

sudo docker build -t {경로} --platform linux/amd64 .

--platform linux/amd64 . 로 빌드를 해야 한다.

했는데..

sudo docker build -t {경로} --platform linux/amd64 .
[+] Building 0.6s (2/3)                                                                                                                                                                                           docker:desktop-linux
[+] Building 0.7s (3/3) FINISHED                                                                                                                                                                                  docker:desktop-linux
 => [internal] load .dockerignore                                                                                                                                                                                                 0.0s
 => => transferring context: 2B                                                                                                                                                                                                   0.0s
 => [internal] load build definition from Dockerfile                                                                                                                                                                              0.0s
 => => transferring dockerfile: 310B                                                                                                                                                                                              0.0s
 => ERROR [internal] load metadata for docker.io/library/nginx:stable-alpine                                                                                                                                                      0.6s
------
 > [internal] load metadata for docker.io/library/nginx:stable-alpine:
------
Dockerfile:2
--------------------
   1 |     # Nginx 설정
   2 | >>> FROM nginx:stable-alpine
   3 |     
   4 |     ENV REACT_APP_API_URL=/api/
--------------------
ERROR: failed to solve: nginx:stable-alpine: error getting credentials - err: exit status 1, out: ``

error getting credentials 에러를 뱉어냈고,

docker login

혹시나 하는 마음으로 login 을 성공적으로 마치고 다시 빌드를 하려고 해도 같은 에러가 발생했다.

🐛 해결

원인에 대해선 깃헙 이슈 에서 확인 할 수 있다.
원인을 요약해보자면, docker 에 자격증명을 해주는 Credential Helper 의 버그였는데, 버전 0.6.3 에서는 비영어 시스템의 로컬에서 오류 문자열을 해석하는 "버그"가 있었다고 한다. 이로 인해 자격 증명에서 login 이 되어 있어도 비영어 시스템에서 자격증명 여부 확인 시 'false' 로 반환 했던 것이다.

방법은 두가지다.
1. Credential Helper 버전을 최신으로 올린다.
2. ~/.docker/config.json 설정을 수정한다. (나의 경우 2번이였다.)

nano 로 파일을 열고

nano $HOME/.docker/config.json

"credsStore" : "desktop" 으로 되어 있거나 "osxkeychain" 으로 되어 있을껀데 이를 삭제해주면 된다.


{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "{토큰}"
                }
        },
        "credsStore": "", # desktop 으로 되어 있는거 삭제
        "currentContext": "desktop-linux",
        "plugins": {
                "-x-cli-hints": {
                        "enabled": "true"
                }
        }
}

📚 참고자료

  1. https://forums.docker.com/t/error-failed-to-solve-error-getting-credentials-err-exit-status-1-out/136124/21

  2. https://github.com/docker/for-win/issues/11261

profile
몫을 다하는 개발자

0개의 댓글