오늘도 한 뼘 더

[Docker] open ../../files/file.html: no such file or directory 본문

DevOps & Infra/Docker

[Docker] open ../../files/file.html: no such file or directory

나른한댕댕이🐶 2022. 5. 17. 15:47
728x90
반응형

  ## 배경  

기존에 AWS ElasticBeanstalk으로 배포하던 service 프로젝트를 Docker로 배포하면서 파일에 접근을 하지 못하는 문제가 발생했다. 

 

  ## 원인  

해당 문제는 파일에 대한 경로를 COPY 하지 않아서 직접 명시해서 COPY한 파일 외에는 execute 파일에 묶여서 접근하지 못하는 문제였다. 

Dockerfile을 작성할 때 multi-stage build를 적용하면 COPY 명령어로 파일을 복사하지 않을 시 exe파일 하나로 동작이 되어 파일을 찾는데 어려움이 있다고 한다. 그래서 파일 경로를 명시하는 코드가 있다면 그 경로를 복사해야 한다고 한다. 

 

  ## 해결 방법  

- 기존 Dockerfile

FROM golang:1.15.6 AS builder
WORKDIR /go/src/service
COPY . .
RUN go mod download
RUN go install -ldflags '-w -extldflags "-static"'

# make application docker image use alpine
FROM alpine:3.10
# using timezone
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
RUN apk add -U tzdata
WORKDIR /go/bin/

# copy config files to image
COPY --from=builder /go/src/service/config/*.json ./config/
# copy execute file to image
COPY --from=builder /go/bin/service .
EXPOSE 1000
CMD ["./service"]

 

- 변경 된 Dockerfile

  * 접근하고자 하는 경로를 복사해서 Dockerfile에 작성한다. 

FROM golang:1.15.6 AS builder
WORKDIR /go/src/service
COPY . .
RUN go mod download
RUN go install -ldflags '-w -extldflags "-static"'

# make application docker image use alpine
FROM alpine:3.10
# using timezone
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
RUN apk add -U tzdata
WORKDIR /go/bin/

# copy files to image
COPY --from=builder /go/src/service/files/* ./files/
# copy config files to image
COPY --from=builder /go/src/service/config/*.json ./config/
# copy execute file to image
COPY --from=builder /go/bin/service .
EXPOSE 1000
CMD ["./service"]
728x90
반응형
Comments