ruby - 如何防止转义传递到 docker 容器中的 ruby​​ 应用程序的 ENV 变量

标签 ruby docker environment-variables

keys.env 包含私钥:

KEY="-----BEGIN PRIVATE KEY-----\nBADANBgkqhki......xjiWsX7Qjoh8XH8nAECgYEAkCNIy1eICdUUt6HgV\nnEGKpwDETJTIJdmW5MlOzsURI/RSnE2Qas/k758isGLaA4m9dZJoxuP/pCfwcvLj\nwmjVBPdTTNF6ADgor6ZVIp6os5wIIurZH7f8yXaggTEyk5r8K6qxz9t/D\n4FaPDsZ2icg0N5i2y/2Sa0w=\n-----END PRIVATE KEY-----\n"

(KEY的值应该用引号括起来,因为它包含\n)

docker-compose.yml 包含env_file 参数:

version: '2'

services:
  testenv:
    image: ruby:2.4-slim  
    env_file:
      - ./keys.env

我用 ruby​​ 应用程序运行容器:

docker-compose run testenv

并尝试使用 ENV['KEY'] 变量:

irb(main):001:0> ENV['KEY']
=> "\"-----BEGIN PRIVATE KEY-----\\nBADANBgkqhki......xjiWsX7Qjoh8XH8nAECgYEAkCNIy1eICdUUt6HgV\\nnEGKpwDETJTIJdmW5MlOzsURI/RSnE2Qas/k758isGLaA4m9dZJoxuP/pCfwcvLj\\nwmjVBPdTTNF6ADgor6ZVIp6os5wIIurZH7f8yXaggTEyk5r8K6qxz9t/D\\n4FaPDsZ2icg0N5i2y/2Sa0w=\\n-----END PRIVATE KEY-----\\n\""

变量已转义,但我需要干净的 private_key。

我没有在 Docker 文档中找到答案。

我看到了两个可行的解决方案,但在我看来没有一个是正确的。

  1. 将 private_key 存储在经过编码且不带引号的 .env 文件中。 A 应用程序中的模块将解码此值。
  2. 应用中的转义值(像这样 Best way to escape and unescape strings in Ruby? )

有没有办法利用 Docker 的内置功能来解决这个问题?

最佳答案

您遇到了一个已知的 docker 问题:

https://github.com/moby/moby/issues/11443

Sorry for the inconvenience but I would rather go the conservative route on this one :( The problem can be solved with echo -e like you mentioned and I think the benefit of keeping env-file simple is higher. I'm going to close this issue, but feel free to continue the discussion and speak up if you disagree.

echo -e 在 ruby​​ 中的等价物是用真正的换行符替换文字 '\n':

ENV['KEY'].gsub('\n', "\n")

并且去掉双引号,保持原样:

KEY=-----BEGIN PRIVATE KEY-----\nBADANBgkqhki......xjiWsX7Qjoh8XH8nAECgYEAkCNIy1eICdUUt6HgV\nnEGKpwDETJTIJdmW5MlOzsURI/RSnE2Qas/k758isGLaA4m9dZJoxuP/pCfwcvLj\nwmjVBPdTTNF6ADgor6ZVIp6os5wIIurZH7f8yXaggTEyk5r8K6qxz9t/D\n4FaPDsZ2icg0N5i2y/2Sa0w=\n-----END PRIVATE KEY-----\n

但是我建议只挂载一个文件:

version: '2'

services:
  testenv:
    image: ruby:2.4-slim  
    volumes:
      - ./keys.pem:/root/keys.pem

然后做一个从 ruby​​ 读取的简单文件。

关于ruby - 如何防止转义传递到 docker 容器中的 ruby​​ 应用程序的 ENV 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44910515/

相关文章:

ruby-on-rails - rails 命令问题

ruby - <RubyGems> 如何更改 gem 环境设置?

ruby - Redis -Pub\Sub - 连接到 Redis 超时

docker - 在k8s中使用k8s节点资源

php - 如何在PHP中获取客户端IP地址

linux - ENV_VAR=${sh_var} 在 sh 脚本中设置

ruby - 在 Ruby 中,#each_pair 在遍历哈希时比 #each 有什么优势?

php - 缩放的 Csrf token 问题

linux - 核心操作系统 : when pulling large docker image of size greater than 4 GB

batch-file - 如何使用变量值作为另一个变量(批处理文件)的名称?