如何参数化Dockerfile?

How to parameterize Dockerfile?

我正在为我们的 Spring 启动应用程序创建一个 Dockerfile。该应用程序采用几个命令行参数。 Dockfile结尾:

CMD java -jar Application.jar --bucket=bucket.list --key=lost

但是,在 Dockfile 中硬编码 bucketkey 的值是最佳做法吗?

如果没问题,我可以接受。否则,我想知道如何参数化 Dockfile.

该应用程序将部署在 AWS 上,如果这为获得更多建议打开了大门。

Docker 设计的重点是尽可能独立于主机环境,包括在构建 Docker 图像时。有 a request 让 Docker 建立对主机环境变量的访问,但被拒绝寻找主机的独立性。那里还评论了一些可能适合您的问题的解决方法。

无论如何,应该做什么 Application.jar?如果它是一个应用程序,应该 运行 在容器内(而不是在构建时)启动它的正确方法是在启动容器时使用自定义脚本 运行。您可以在那里设置您的凭据或您希望从环境变量访问的任何其他信息,这些信息可以在启动容器时设置:docker run -e "MYKEY=secret" -e "MYBUCKET=bucket" myuser/myapp /my/custom/script

您可以使用 environment variables or build arguments.

构建参数允许您指定在构建时应用的参数,当您使用 --build-arg ARG_NAME=ARG_VALUE 命令行参数执行 docker build 时。

环境变量允许您指定在使用 -e "ENV_NAME=ENV_VALUE" 命令行参数执行 docker run 时在运行时应用的参数。