我们希望使用 Docker 镜像 在不同的环境(暂存/测试、生产...)中部署我们的 Angular 2 应用
在本地开发时,我们通过 http://localhost:8080 连接到后端 REST API但是当我们在不同的环境中部署时,我们希望使用相同的 Docker 镜像并连接到不同的 REST API 端点。
在运行时注入(inject)此配置到Docker容器的首选方法是什么?
有没有办法通过环境变量做到这一点?
我们可以通过包含类似内容的纯文本文件来做到这一点
{
"BASE_URL": "https://api.test.example.com"
}
最佳答案
在这篇文章和 Twitter 上进行了一些讨论之后,似乎没有简单的方法可以通过 Webpack 实现我想要的。这些文件在运行时仅作为静态文件提供,无法在构建时排除文件并在运行时包含它。
所以我决定采用我想到的解决方案/解决方法:在启动 docker 容器时更改静态文件。
我通过这样做来创建我的 docker 镜像
npm run build:prod
docker build -t angularapp .
我使用官方的 nginx docker 镜像作为我的基础镜像,Dockerfile 看起来像
FROM nginx:1.11.1
COPY dist /usr/share/nginx/html
COPY run.sh /run.sh
CMD ["bash", "/run.sh"]
run.sh用于通过sed修改配置文件,之后启动nginx:
#!/bin/sh
/bin/sed -i "s|http://localhost:8080|${BASE_URL}|" /usr/share/nginx/html/api.config.chunk.js
nginx -g 'daemon off;'
这允许我通过 docker-compose.yml 文件中的环境变量配置 BASE_URL(简化):
version: '2'
services:
api:
image: restapi
frontend:
image: angularapp
environment:
BASE_URL: https://api.test.example.com
使用此解决方案/解决方法,我可以通过在启动 docker 容器时配置通过环境变量使用的 REST API 端点来部署由我的 jenkins 作业创建的特定版本的 docker 镜像部署在我的所有环境(开发、登台、生产)中.
关于angular - 在特定的 Docker 容器环境中配置 Angular 2 Webpack App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40379931/
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
在读取/解析文件(使用Ruby)时忽略某些行的最佳方法是什么?我正在尝试仅解析Cucumber.feature文件中的场景,并希望跳过不以Scenario/Given/When/Then/And/But开头的行。下面的代码有效,但它很荒谬,所以我正在寻找一个聪明的解决方案:)File.open(file).each_linedo|line|line.chomp!nextifline.empty?nextifline.include?"#"nextifline.include?"Feature"nextifline.include?"Inorder"nextifline.include?
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
我想知道我应该如何着手这个项目。我需要每周向人们发送一次电子邮件。但是,这必须在每周的特定时间自动生成并发送。编码有多难?我需要知道是否有任何书籍可以提供帮助,或者你们中的任何人是否可以指导我。它必须使用rubyonrails进行编程。因此有一个网络服务和数据库集成。干杯 最佳答案 为什么这么复杂?您只需安排工作。您可以使用Delayed::Job例如。Delayed::Job让您可以使用run_at符号在特定时间安排作业,如下所示:Delayed::Job.enqueue(SendEmailJob.new(...),:run_
如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback
情况:使用Rspec、FactoryGirl和VCR测试Rails应用程序。每次创建用户时,都会通过Stripe的API创建关联的Stripe客户。测试时,添加VCR.use_cassette或describe"...",vcr:{cassette_name:'stripe-customer'}do...到涉及用户创建的每个规范。我的实际解决方案如下:RSpec.configuredo|config|config.arounddo|example|VCR.use_cassette('stripe-customer')do|cassette|example.runendendend但这是
我想从特定索引开始遍历数组。我该怎么做?myj.eachdo|temp|...end 最佳答案 执行以下操作:your_array[your_index..-1].eachdo|temp|###end 关于ruby-从特定索引开始迭代数组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/44151758/
array=["Spamisbad","Hamisgood"]我想从数组中选择包含单词“good”的元素,并将字符串设置为新变量。我怎么能这样做? 最佳答案 由于目前为止这两个答案都没有指导您如何将数组中的字符串更新为新值,因此这里有一些选项:#Findeverystringmatchingacriteriaandchangethemarray.select{|s|s.include?"good"}.each{|s|s.replace("bad")}#Findeverystringmatchingapatternandchanget
例如:options={fight:true,use_item:false,run_away:false,save_game:false}我想要一个计算结果为true的bool表达式,当且仅当:fight为true,其余为false(如上图所示)。我可以一起解决这个问题,但我正在努力训练自己编写更优雅的ruby。谢谢!编辑:黑客是:(options[:fight]==true&&options.delete(:fight).values.all{|x|!x}) 最佳答案 假设所有值都是严格的bool值,它很简单:options=
假设我安装了三个gem:package-0.4.0、package-0.5.0和package-0.5.0-jbfink(我构建了-jbfink一个,因为我对0.5做了非常小的改动.0的来源,并希望将其与官方版本区分开来)。是否有gem(或其他命令)将其设为默认值?现在我已经安装了所有三个,但我的shell正在从package-0.5.0中获取可执行文件,我宁愿它默认为0.5.0-jbfink。将0.5.0-jbfink命名为0.5.1解决了这个问题,但我不想这样做,因为我不想与正式发布的0.5.1出现冲突。 最佳答案 转到conf