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
반응형