在本地构建 docker compose 时如何使用 secret
How to use secrets when building docker compose locally
我最近开始使用 Buildkit 来隐藏一些环境变量,并且在 gha 的产品中效果很好!
我的Docker文件现在是这样的:
# syntax=docker/dockerfile:1.2
...
RUN --mount=type=secret,id=my_secret,uid=1000 \
MY_SECRET=$(cat /run/secrets/my_secret) \
&& export MY_SECRET
而我的前脸是这样的:
DOCKER_BUILDKIT=1 docker build \
--secret id=my_secret,env="MY_SECRET"
当我 运行 在我的 Github 操作中使用它时,它完美地工作。
但是现在,这里的问题 是我尝试在本地构建它的时候。执行 docker-compose build
时失败。当然,因为我没有传递任何秘密,所以我的后端(Docker文件)将无法从 run/secrets/
.
读取它
到目前为止,我尝试使用 docker-compose build
完成本地构建:
1.使用 Docker 个秘密:
我基本上试过这样做:
$ docker swarm init
$ echo "my_secret_value" docker secret create my_secret -
我认为保存秘密可以解决问题,但没有用。我仍然收到相同的错误消息:
cat: can't open '/run/secrets/my_secret': No such file or directory
- 我也试过像下面这样在我的 docker-compose 文件中传递秘密,但也没有用:
version: '3'
services:
app:
build:
context: "."
args:
- "MY_SECRET"
secrets:
- my_secret
secrets:
my_secret:
external: true
- 我也试过将秘密存储在本地文件中,但是没有用,同样的错误:
version: '3'
services:
app:
build:
context: "."
args:
- "MY_SECRET"
secrets:
- my_secret
secrets:
my_secret:
file: ./my_secret.txt
- 我也试过做这样的事情 answer 像这样的事情:
args:
- secret=id=my_secret,src=./my_secret.txt
但还是出现同样的错误:
cat: can't open '/run/secrets/my_secret': No such file or directory
我做错了什么才能成功执行 docker-compose build
?
我知道我可以轻松使用两个 Docker 文件,一个 Docker 文件在本地构建,一个 Docker 文件在产品中构建,但我只想按原样使用 Buildkit,只需修改我的 docker-compose.yml
文件。
有没有人知道我缺少什么才能从 /run/secrets/
构建本地阅读?
最近在 v2 中实现了对此的支持。请参阅以下拉取请求。
提供的示例如下所示:
services:
frontend:
build:
context: .
secrets:
- server-certificate
secrets:
server-certificate:
file: ./server.cert
所以你很接近,但你必须在构建密钥下添加密钥。
另外请记住,您必须使用 docker compose
而不是 docker-compose
,以便使用 docker 客户端中内置的 v2。
我最近开始使用 Buildkit 来隐藏一些环境变量,并且在 gha 的产品中效果很好!
我的Docker文件现在是这样的:
# syntax=docker/dockerfile:1.2
...
RUN --mount=type=secret,id=my_secret,uid=1000 \
MY_SECRET=$(cat /run/secrets/my_secret) \
&& export MY_SECRET
而我的前脸是这样的:
DOCKER_BUILDKIT=1 docker build \
--secret id=my_secret,env="MY_SECRET"
当我 运行 在我的 Github 操作中使用它时,它完美地工作。
但是现在,这里的问题 是我尝试在本地构建它的时候。执行 docker-compose build
时失败。当然,因为我没有传递任何秘密,所以我的后端(Docker文件)将无法从 run/secrets/
.
到目前为止,我尝试使用 docker-compose build
完成本地构建:
1.使用 Docker 个秘密:
我基本上试过这样做:
$ docker swarm init
$ echo "my_secret_value" docker secret create my_secret -
我认为保存秘密可以解决问题,但没有用。我仍然收到相同的错误消息:
cat: can't open '/run/secrets/my_secret': No such file or directory
- 我也试过像下面这样在我的 docker-compose 文件中传递秘密,但也没有用:
version: '3'
services:
app:
build:
context: "."
args:
- "MY_SECRET"
secrets:
- my_secret
secrets:
my_secret:
external: true
- 我也试过将秘密存储在本地文件中,但是没有用,同样的错误:
version: '3'
services:
app:
build:
context: "."
args:
- "MY_SECRET"
secrets:
- my_secret
secrets:
my_secret:
file: ./my_secret.txt
- 我也试过做这样的事情 answer 像这样的事情:
args:
- secret=id=my_secret,src=./my_secret.txt
但还是出现同样的错误:
cat: can't open '/run/secrets/my_secret': No such file or directory
我做错了什么才能成功执行 docker-compose build
?
我知道我可以轻松使用两个 Docker 文件,一个 Docker 文件在本地构建,一个 Docker 文件在产品中构建,但我只想按原样使用 Buildkit,只需修改我的 docker-compose.yml
文件。
有没有人知道我缺少什么才能从 /run/secrets/
构建本地阅读?
最近在 v2 中实现了对此的支持。请参阅以下拉取请求。
提供的示例如下所示:
services:
frontend:
build:
context: .
secrets:
- server-certificate
secrets:
server-certificate:
file: ./server.cert
所以你很接近,但你必须在构建密钥下添加密钥。
另外请记住,您必须使用 docker compose
而不是 docker-compose
,以便使用 docker 客户端中内置的 v2。