제목
[Troubleshooting, Docker] invalid referencd format, unexpected EOF
관련게시글
[Home Server] USB로 우분투 설치, 인터넷 연결, SSH 설정, 공유기 설정
[Home Server] SSH 서버-클라이언트 연결, 도커 설치
[Troubleshooting, Home Server] (LG U+)SSH 서버-클라이언트 연결 실패
[Troubleshooting, Docker] invalid referencd format, unexpected EOF
목차
1. 오류 상황
2. 오류 내용
3. 해결책
1. 오류 상황
GitHub Actions 스크립트에서 ssh를 통해,
원격 서버로 접근하여 docker image를 pull 하였으나,
invalid referencd format과 unexpected EOF를 맞닥뜨렸습니다.
2. 오류 내용
2.1 invalid referencd format
0098508f78da Retrying in 6 seconds
0098508f78da Retrying in 5 seconds
0098508f78da Retrying in 4 seconds
0098508f78da Retrying in 3 seconds
0098508f78da Retrying in 2 seconds
0098508f78da Retrying in 1 second
0098508f78da Downloading [> ] 540.1kB/93.23MB
0098508f78da Downloading [> ] 1.081MB/93.23MB
0098508f78da Downloading [=> ] 2.162MB/93.23MB
0098508f78da Downloading [==================================================>] 93.23MB/93.23MB
unexpected EOF
Total reclaimed space: 0B
Error response from daemon: invalid reference format
Error response from daemon: invalid reference format
Error response from daemon: invalid reference format
Error response from daemon: invalid reference format
Error: Process completed with exit code 123.
2.2 unexpected EOF
$ docker pull docker.osgeo.org/geoserver:2.25.1
2.25.1: Pulling from geoserver
74ac377868f8: Downloading [==================================================>] 13.67MB/13.67MB
2d9a573f9a71: Waiting
905a2e76bcf0: Waiting
35fc155cdec3: Waiting
0098508f78da: Waiting
08e635e74aaa: Waiting
5bb51ce6ea98: Waiting
59caba586155: Waiting
365813e8ab0c: Waiting
5a20259b8bde: Waiting
8cc4620f2aec: Waiting
5b377c7b51f4: Waiting
43fdd52b0082: Waiting
16398cb36609: Waiting
c8d5f5d22f3a: Waiting
unexpected EOF
3.1 문법오류 해결책
3.1.1 EOF 문법 수정
EOF를 작은 따옴표로 감싸주는 것으로,
예상치 못한 곳에서 문장이 종료되는 것을 방지합니다.
run: |
ssh -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_HOST }} << EOF
위의 스크립트를 아래처럼 변경했습니다.
run: |
ssh -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_HOST }} << 'EOF'
3.2 unexpected EOF 해결책
3.2.1 GitHubActions 가 아닌 서버에서 pull하기
docker 설정을 수정하며 직접 서버에서 image를 pull 해봅니다.
https://stackoverflow.com/questions/53677592/docker-pull-unexpected-eof
위 글을 보면,
다운로드 되는 layer 수에 따라 unexpected EOF 가 발생할 수 있다고 하여,
서버에서 docker가 다운로드 할 수 있는 레이어를 제한하여 pull 합니다.
아래 경로에 파일을 생성하여 제어합니다.
/etc/docker/daemon.json
기본 값은 3이며, 이를 2 또는 1로 제한하여,
네트워크 간 전달되는 패킷을 양을 줄입니다.
대신 그만큼 전송 속도가 느려질 수 있습니다.
{
"max-concurrent-downloads": 1
}
3.2.2 이미지를 수동으로 전송하기
레이어를 제한하여도 문제를 해결할 수 없다면 image를 tar로 변환하고,
scp 명령어를 통해 수동으로 전송-로드합니다.
3.2.2.1 Docker 이미지를 tar로 저장
docker save -o <저장할 파일 경로 및 이름>.tar <이미지 이름>:<태그>
아래는 제가 직접 사용한 코드입니다.
docker save -o geoserver_2.25.1.tar docker.osgeo.org/geoserver:2.25.1
3.2.2.2 scp 명령어를 사용하여 파일 전송
scp 명령어를 사용하여 파일을 전송합니다.
scp /path/to/local/<저장할 파일 경로 및 이름>.tar username@remote_host:/path/to/remote/directory/
아래는 제가 사용한 코드입니다.
scp geoserver_2.25.1.tar min@minserver:/home/min
3.2.2.3 Docker 이미지 로드
docker load 를 통해 tar파일을 이미지로 로드합니다.
docker load -i /path/to/remote/directory/<저장할 파일 경로 및 이름>.tar
마찬가지로 아래는 제가 사용한 코드입니다.
docker load -i geoserver_2.25.1.tar
이제 docker images를 통해 image가 생성된 것을 확인할 수 있습니다.
sungjomin/rna-gis-frontend 20240714154816 4672158ecb44 2 hours ago 46.7MB
sungjomin/rna-gis-backend 20240714154816 e0944fe205f2 2 hours ago 345MB
dpage/pgadmin4 latest 73ce6afcb76d 2 weeks ago 487MB
docker.osgeo.org/geoserver 2.25.1 76ebad46b72a 7 weeks ago 957MB
postgis/postgis 13-3.1 3a40ce4c6592 2 years ago 567MB
Docker 이미지의 크기가 500MB 이상인 경우,
네트워크 품질에 따라 예외가 발생할 수 있습니다.
이 때, 멀티 스테이지 빌드 등 이미지 크기를 최적화하여 예외가 발생하지 않도록 해야 하지만,
공식 이미지는 이미 최적화 되어 있는 경우가 대다수이기에,
이미지 크기를 줄이기 어려울 수 있습니다.
저는 geoserver 공식 이미지를 pull 하던 중,
geoserver이미지의 크기가 900MB 이상이었고,
네트워크 품질 또한 좋지 않아 위 문제를 마주했습니다.
이후 이미지를 수동으로 로드하는 것으로 해결했습니다.