在将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"