Docker-高山图片上的WORKDIR问题(多阶段构建)

时间:2020-02-20 19:14:07

标签: docker docker-entrypoint workdir

我的Dockerfile处于第二阶段:

############################################ MULTI STAGE BUILD PART 2 ##############################################

# Start from alpine image
FROM alpine

# Creating work directory
WORKDIR /service

# Copy the certificats and executable into new Docker image
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /service/main /service/
COPY --from=builder /service/.credentials /service/.credentials/

# Expose port
EXPOSE ${GRPC_PORT}
EXPOSE ${REST_PORT}

## Get required ARGs and put them into ENVs variables
ARG ENVIRONMENT
ARG NAMESPACE
ARG GRPC_PORT
ARG REST_PORT
ENV _ENVIRONMENT=${ENVIRONMENT}
ENV _NAMESPACE=${NAMESPACE}
ENV _GRPC_PORT=${GRPC_PORT}
ENV _REST_PORT=${REST_PORT}

### HERE YOU CAN TEST WITH ANY OF THE FOLLOWING ENTRYPOINT

# The One I need
ENTRYPOINT /main "ENVIRONMENT=${_ENVIRONMENT}" "NAMESPACE=${_NAMESPACE}" "GRPC_PORT=${_GRPC_PORT}" "REST_PORT=${_REST_PORT}"

# This one isn't able to resolve ENVs variables, but I use it as an example for my ISSUE
ENTRYPOINT [ "/main" ]

如您所见,WORKDIR设置为/ service

但是,如果使用第一个入口点运行映像,则会得到:

/bin/sh: /main: not found

如果使用第二个入口点运行,则会得到:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"/main\": stat /main: no such file or directory": unknown.

注意:另一个有趣的地方是 COPY --from = builder ... ,在这里我需要将dest设置为/service/,否则我的文件将被删除。复制到/目录


根据documentation

WORKDIR指令为任何RUN,CMD, 紧随其后的ENTRYPOINT,COPY和ADD指令 Dockerfile。


有什么主意吗?它真的和我或Docker / alpine有关吗?

1 个答案:

答案 0 :(得分:1)

Entrypoint必须是./main。

/main是一个绝对路径,它指向您根目录上的主目录。

由于您位于/service中,因此需要相对路径。您需要./main,它指向/service/main