docker - 使用 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
尝试以下无济于事:
- 运行
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"
推荐阅读
- java - 如何在 Spring-Boot 项目中为电话号码身份验证创建 REST API?
- amazon-s3 - 如何从 aws javascript sdk 中的 selectObjectContent 获取可读流?
- javascript - antD 模型 API - 背景颜色变化
- python - 如何使用 python 错误在 Google colab 中读取更大的镶木地板文件:ValueError("engine must be one of 'pyarrow', 'fastparquet'")
- javascript - 使用 Angular 通用的 ngx-translate 在转换参数化值时遇到问题
- python - numpy 数组到 Pandas 表
- jmeter - 调试采样器不显示正则表达式提取器变量
- snowflake-cloud-data-platform - 排除一段时间内的结果
- spring-boot - 如何在 graphql-spring-boot-autoconfigure 中跳过/禁用 GraphQLExtendedScalarsInitializer
- azure-data-factory - Azure 数据工厂重新启动单个群集