docker-compose.yml规范的3.1版引入了对秘密的支持.
我试过这个:
version: '3.1'
services:
a:
image: tutum/hello-world
secret:
password: the_password
b:
image: tutum/hello-world
Run Code Online (Sandbox Code Playgroud)
$ docker-compose up 收益:
Unsupported config option for services.secret: 'password'
我们如何在实践中使用秘密功能?
我使用 Secrets 来通过使用 Postgres 作为数据库的 Docker 堆栈来管理用户名、密码和数据库名。我现在想使用Docker提供的健康检查功能。
docker-compose.yml
x-db-secrets: &db_secrets
- psql_user
- psql_pass
- psql_dbname
services:
db:
image: postgres:13.1
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER_FILE=/run/secrets/psql_user
- POSTGRES_DB_FILE=/run/secrets/psql_dbname
- POSTGRES_PASSWORD_FILE=/run/secrets/psql_pass
secrets: *db_secrets
healthcheck:
test: pg_isready -U myuser -d db_prod
interval: 10s
timeout: 3s
retries: 3
(... other services...)
volumes:
postgres_data:
static_content:
media_content:
secrets:
psql_user:
external: true
psql_pass:
external: true
psql_dbname:
external: true
Run Code Online (Sandbox Code Playgroud)
正如本节中可以指出的healthcheck:,我通过运行状况检查公开了数据库用户名和数据库名称。我的问题(根据答案进行一些后续行动):
想法?解决方法?
额外细节:
docker-compose --version docker-compose version 1.11.1,build 7c5d5e4
我已将秘密'my_secret_data'添加到我的群集群中:
我的撰写文件的开头如下:
version: "3.1"
secrets:
my_secret_data:
external: true
services:
master:
image: jenkins-master
secrets:
- my_secret_data
ports:
- "8080:8080"
- "50000:50000"
Run Code Online (Sandbox Code Playgroud)
'docker stack deploy'不断给出错误:
秘密不允许额外的财产秘密
我跟着你如何使用docker-compose v3.1管理秘密值?据我所知,并安装了正确的版本,但不断收到上述错误.任何帮助非常感谢.
我试图从秘密设置密码,但它没有拿起它.Docker Server版本为17.06.2-ce.我用下面的命令来设置秘密:
echo "abcd" | docker secret create password -
Run Code Online (Sandbox Code Playgroud)
我的docker compose yml文件看起来像这样
version: '3.1'
...
build:
context: ./test
dockerfile: Dockerfile
environment:
user_name: admin
eureka_password: /run/secrets/password
secrets:
- password
Run Code Online (Sandbox Code Playgroud)
我也有root的秘密标签:
secrets:
password:
external: true
Run Code Online (Sandbox Code Playgroud)
当我在环境中对密码进行硬编码时,它可以正常工作,但是当我尝试通过秘密时它不会接收.我试着把作曲版本改为3.2,但没有运气.任何指针都非常感谢!
我不想将docker secrets与swarm一起使用,我发现这样做是可行的。基本上,docker只是将/ run / secrets挂载到docker容器中,但是当我进入新建的docker容器并echo $POSTGRES_PASSWORD_FILE获取我的秘密文件的路径时。
root@94a0f092eeb1:/# echo $POSTGRES_PASSWORD_FILE
/run/secrets/db_password
Run Code Online (Sandbox Code Playgroud)
这是我的docker-compose.yml档案
version: '3.1'
services:
postgres:
image: postgres:9.4
container_name: postgres
environment:
POSTGRES_USER: "db_user"
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
POSTGRES_DB: "my_db"
secrets:
- db_password
volumes:
- ./postgres:/var/lib/postgresql/data
expose:
- 5432
secrets:
db_password:
file: ./POSTGRES_PASSWORD.txt
Run Code Online (Sandbox Code Playgroud)
我的密码设置正确/文件有问题吗?
是否可以从我的本地mac在云托管的docker swarm集群上执行命令?如果有,怎么样?
我想执行命令,例如从我的本地执行docker swarm:
docker create secret my-secret <address to local file>
docker service create --name x --secrets my-secret image
Run Code Online (Sandbox Code Playgroud) 我们当前的构建系统在 docker 容器(Docker in Docker)内构建 docker 镜像。我们的许多 Docker 构建都需要凭据才能从私有工件存储库中提取。
我们已经使用 docker Secrets 处理了这个问题。将秘密传递给 docker build 命令,并在 Dockerfile 中,在需要的地方引用 RUN 命令中的秘密。这意味着我们正在使用 docker buildkit。 本文对此进行了解释。
我们正在迁移到不同的构建系统(GitLab),并且管理员已在 Docker 中禁用 Docker(安全原因),因此我们将迁移到Kaniko进行 docker 构建。
Kaniko 似乎不像 docker 那样支持秘密。(没有命令行选项可以通过 Kaniko 执行器传递秘密)。
docker 构建所需的凭据存储在 GitLab 变量中。对于 DinD,您只需将这些变量作为秘密添加到 docker 构建中:
DOCKER_BUILDKIT=1 docker build . \
--secret=type=env,id=USERNAME \
--secret=type=env,id=PASSWORD \
Run Code Online (Sandbox Code Playgroud)
然后在 docker 中,使用秘密:
RUN --mount=type=secret,id=USERNAME --mount=type=secret,id=PASSWORD \
USER=$(cat /run/secrets/USERNAME) \
PASS=$(cat /run/secrets/PASSWORD) \
./scriptThatUsesTheseEnvVarCredentialsToPullArtifacts
...rest of build..
Run Code Online (Sandbox Code Playgroud)
如果没有 kaniko 执行器的 --secret 标志,我不确定如何利用 …
gitlab-ci docker-secrets docker-in-docker kaniko docker-buildkit
--from-file使用文件名以外的文件名时,有没有办法设置 kubernetes 密钥名称?
secrets.json我在容器中使用了一堆不同的配置文件。但是,为了组织我的文件,它们都没有secrets.json在我的主机上命名。例如secrets.dev.json或secrets.test.json. 我的应用程序只知道读入secrets.json.
当我使用 创建秘密时kubectl create secret generic my-app-secrets --from-file=secrets.dev.json,这会导致密钥名称为secrets.dev.json,而不是secrets.json。
我将我的秘密内容作为文件安装(这是从 Docker swarm 迁移而来的遗留物)。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
template:
spec:
volumes:
- name: my-secret
secret:
secretName: my-app-secrets
containers:
- name: my-app
volumeMounts:
- name: my-secret
mountPath: "/run/secrets/secrets.json"
subPath: "secrets.json"
Run Code Online (Sandbox Code Playgroud)
因为它secrets.json不作为键存在,因为它使用了文件名 ( secrets.dev.json),所以它最终会变成一个目录。我最终得到了这个安装路径:/run/secrets/secrets.json/secrets.dev.json。
我希望能够将密钥名称设置为secrets.json而不是使用secrets.dev.json.
如何将 Docker 机密(/run/secrets 中的文件/数据)注入到 application.properties 文件中?使用环境变量安全吗?
我正在阅读Docker Secrets,并继续阅读Docker的人故意选择将秘密存储在文件中,/run/secrets而不是使用环境变量.但无处我就一直能够找到一个解释,为什么.
所以我问:为什么使用Docker Secrets机制比将环境变量注入我的容器(via -e或a --env-file)更安全?
docker-secrets ×10
docker ×6
docker-swarm ×1
gitlab-ci ×1
health-check ×1
java ×1
kaniko ×1
kubernetes ×1
security ×1
spring ×1
spring-boot ×1