首页 > 解决方案 > 使用 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 应该允许BINARY_NAME通过ARG关键字的值。

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

尝试以下无济于事:

有谁知道这里发生了什么,ARG声明抛出权限问题?

标签: docker

解决方案


尝试更改您的 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"

推荐阅读