Phi*_*ver 21 environment-variables docker docker-compose
我有一个安装程序,可以将一些值输出到 .env 文件中,供 docker-compose 使用。到目前为止,所有这些都有效,但似乎无法使用的 SSH 密钥除外。
到目前为止,我已经尝试使用正确格式的私钥并用\n. 但是,这会进一步中断工作流程,并且不会在容器内使用 printenv 作为所需的多行变量出现。
docker-compose.yml
myservice:
build: .
environment:
- SSH_KEY
- SINGLE_LINE_VALUE
Run Code Online (Sandbox Code Playgroud)
.env(忽略明显损坏的 sshkey)
SINGLE_LINE_VALUE=I Load just fine
SSH_KEY="---------------
ABCDEFGH
--------------------
"
Run Code Online (Sandbox Code Playgroud)
到容器运行时,SSH_KEY 的环境值只是“---------------
非常感谢任何想法。
jam*_*ing 11
如果您不介意不使用该.env文件(也许该环境变量仅在单个容器中使用)。您可以直接在其中定义环境变量docker-compose.yml,可以充分利用 YAML 格式化选项。IE:
myservice:
build: .
environment:
SSH_KEY: >
--------- WHATEVER ----------
randomkeybase64thingforyourse
rvice
------- END WHATEVER --------
Run Code Online (Sandbox Code Playgroud)
附带说明一下,您不必复制.env该部分内的值environment。.env变量在文件内部使用docker-compose.yml,但不在容器环境中使用。但是,您可以这样做:
myservice:
build: .
env_file:
# Files in this array have the same format as `.env` files, but they are
# passed to container's environment instead being used inside this
# `docker-compose.yml` file
- variables.env
environment:
SSH_KEY: >
--------- WHATEVER ----------
randomkeybase64thingforyourse
rvice
------- END WHATEVER --------
Run Code Online (Sandbox Code Playgroud)
也许不是最好的解决方案,但至少有效。
.env
KEY="--------------- \n ABCDEFGH \n --------------------"
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: '3'
services:
test:
image: ubuntu
environment:
- SSH_KEY=$KEY
command: bash -c "echo \"$${SSH_KEY}\" | perl -pe 's/\\\n/\n/g' "
Run Code Online (Sandbox Code Playgroud)
$$ 表示美元符号的转义,因此 docker-compose 不会在 .yml 文件中而是在运行时评估该变量
需要 perl 替换,因为 docker-compose 会自动将转义斜杠添加到新行字符。
| 归档时间: |
|
| 查看次数: |
12314 次 |
| 最近记录: |