【问题标题】:Docker - WORKDIR issue on alpine image (Multi-Stages build)Docker - 高山映像上的 WORKDIR 问题(多阶段构建)
【发布时间】:2020-06-05 04:46:03
【问题描述】:

我的 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 有关吗?

【问题讨论】:

  • 您的入口点必须是./main 而不是/main./main 指向 /service/main。
  • 好的,我现在正在尝试,但是为什么main 也不起作用?
  • plain jane main 会在你的 $PATH 中寻找 somthin
  • 好吧,你是对的......我花了 2 小时半才弄清楚这个 . 。请写一个答案,以便我为你接受
  • 老兄,它发生了。我一生都花在一个失踪的角色上的时间太高了。答案已添加。 (你也可以投票给 cmets :))

标签: docker docker-entrypoint workdir


【解决方案1】:

Entrypoint 必须是 ./main。

/main 是一个绝对路径,它将引用您根目录上的主目录。

因为你在/service,你需要一个相对路径。你想要./main,它指向/service/main

【讨论】:

  • 谢谢,那是我的小错误!
猜你喜欢
  • 2019-09-27
  • 1970-01-01
  • 2020-09-08
  • 2016-10-13
  • 2018-09-25
  • 2021-11-06
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
相关资源
最近更新 更多