gpt4 book ai didi

docker - 如何将 heroku 配置变量传递给 docker build?

转载 作者:行者123 更新时间:2023-12-05 06:14:52 26 4
gpt4 key购买 nike

我正在尝试使用 heroku.yml 将我的 Rails 应用程序部署到 Heroku。这是我的 yml 设置

setup:
addons:
- plan: cleardb-mysql
as: DATABASE
build:
docker:
web: Dockerfile
config:
RAILS_ENV: development
DATABASE_URL: mysql2://abcdef:1234567@somewhere-someplace-123.cleardb.net/heroku_abcdefg123456
run:
web: bin/rails server -p $PORT -b 0.0.0.0

我正在使用 MySQL 作为数据库。这是我的 Dockerfile,Heroku 正在使用它来构建图像。

FROM ruby:2.6.5-alpine

ARG DATABASE_URL
ARG RAILS_ENV
# Adding the required dependencies
# Installing Required Gems
# Other Configs...
# Copying Gem Files
COPY Gemfile Gemfile.lock ./
# Installing Gems
RUN bundle install --jobs=4 --retry=9
# Copying package and package.lock
COPY package.json yarn.lock ./
# Installing node_modules
RUN yarn
# Copy everything to the from current dir to container_root
COPY . ./
#Compiling assets
RUN bundle exec rake assets:precompile # this precompilation step need DATABASE_URL
CMD ["rails", "server", "-b", "0.0.0.0"]

这按预期工作,但问题是我必须在 heroku.yml 文件中传递数据库字符串。有没有一种方法可以引用在 Heroku 中声明的配置变量?

我试过了,但它不起作用,因为 docs 还说 Heroku 中声明的配置变量在构建时不可用。

setup:
addons:
- plan: cleardb-mysql
as: DATABASE
build:
docker:
web: Dockerfile
config:
RAILS_ENV: $RAILS_ENV
DATABASE_URL: $DATABASE_URL
run:
web: bin/rails server -p $PORT -b 0.0.0.0

此问题可能的解决方法是什么?

最佳答案

在不使用 heroku.yml 的情况下,一个可能的解决方案是在 Dockerfile 中包含 env 变量。
Java 代码示例:

CMD java -Dserver.port=$PORT -DmongoDbUrl=$MONGODB_SRV  $JAVA_OPTS -jar /software/myjar.jar

您需要在本地构建镜像,将其推送并发布到 Heroku Registry 中:当它运行时会注入(inject) Config Vars(即 MONGODB_SRV)

关于docker - 如何将 heroku 配置变量传递给 docker build?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62695544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com