
💻 개발 환경
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"
}
}
}