使用ARG进行替换会导致' docker run '失败



在将ARG语句添加到我们的Dockerfile后,我一直在努力解决问题。

我使用以下命令来运行Docker镜像:docker run -d -p <PORT>:<PORT>/tcp --name <NAME> <IMAGE>

原始Dockerfile。

FROM golang:1.14                     
WORKDIR /app
EXPOSE 8080
ADD server.bin /app/server.bin
ADD base/config /app/base/config
CMD "/app/server.bin"

修改后的Dockerfile应该通过ARG关键字允许BINARY_NAME值。

FROM golang:1.14                                
ARG BINARY_NAME
WORKDIR /app
EXPOSE 8080
ADD $BINARY_NAME /app/$BINARY_NAME
RUN chmod +x /app/$BINARY_NAME   # Adding this line gives the same error.
ADD base/config /app/base/config
CMD "/app/$BINARY_NAME"

修改后的Dockerfile无法以以下方式开始:/bin/sh: 1: /app/: Permission denied

尝试了以下操作,但无效:

  • 运行docker event&docker start -a ...以获得更详细的输出,但除了容器正在启动和死亡之外,没有其他信息。
  • 用大括号括起来的替换。
  • 添加RUN chmod +x.

有没有人知道这里发生了什么,对于ARG语句抛出权限问题?

尝试像下面这样改变你的Dockerfile:

FROM golang:1.14                                
ARG BINARY_NAME
# Make `BINARY_NAME` an environment variable so that `CMD` can use it
ENV BINARY_NAME=$BINARY_NAME
WORKDIR /app
EXPOSE 8080
ADD $BINARY_NAME /app/$BINARY_NAME
RUN chmod +x /app/$BINARY_NAME
ADD base/config /app/base/config
CMD "/app/$BINARY_NAME"

最新更新