标签: docker-secrets

构建时的 Docker 秘密

在构建期间(不是 docker-compose 特定的 .yml 文件)是否有任何可行的可能性在 Dockerfile 中使用https://docs.docker.com/engine/swarm/secrets/

docker dockerfile docker-secrets

5
推荐指数
1
解决办法
653
查看次数

Docker、AspNetCore、DB 连接字符串最佳实践

我花了大约一周的时间尝试学习 docker 及其可以做的所有事情,但是我正在努力解决的一件事是如何管理秘密的最佳实践,特别是围绕数据库连接字符串和应如何存储这些内容。

我脑子里有一个计划,我想要一个 docker 镜像,其中包含 ASP.NET Core 网站、MySQL 数据库和 PHPMyAdmin 前端,并将其部署到我在 DigitalOcean 拥有的 Droplet 上。

我已经玩了一下,我有一个 docker-compose.yml 文件,其中 MySQL DB 和 PhpMyAdmin 正确链接在一起

version: "3"

services:
  db:
    image: mysql:latest
    container_name: mysqlDatabase
    environment:
    - MYSQL_ROOT_PASSWORD=0001
    - MYSQL_DATABASE=atestdb
    restart: always
    volumes:
    - /var/lib/mysql
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: db-mgr
    ports:
    - "3001:80"
    environment:
    - PMA_HOST=db
    restart: always
    depends_on:
    - db
Run Code Online (Sandbox Code Playgroud)

这正确地为我创建了一个 MySQL 数据库,我可以使用 root / 0001 作为用户名/密码组合通过正在运行的 PHPMyAdmin 前端连接到它。

我知道我现在需要将我的 AspNetCore Web 应用程序添加到此,但我仍然对获取数据库密码的最佳方法感到困惑。

我已经查看了 docker swarm/secrets,但我仍然不完全理解它是如何工作的,特别是如果我想将我的 docker-compose 文件检查到 GIT/SCM 中。我读过的其他内容建议使用环境变量,但我似乎仍然不明白这与仅检查 appsettings.json 文件中的连接字符串有什么不同,或者就此而言,这在完整的 …

mysql docker docker-compose asp.net-core docker-secrets

5
推荐指数
1
解决办法
5006
查看次数

清理 Docker Swarm 中未引用的配置和机密

docker config ls在我的 Docker Swarm 集群上创建和删除堆栈和服务一段时间后,和返回的列表docker secret ls非常广泛。但是,列出的许多配置和机密都是以前部署的过时遗留物,并且不再被任何正在运行的服务引用。

是否有任何类似于docker system prune的快速等效方法可以清除未引用项目中的配置和秘密存储?

docker docker-swarm docker-swarm-mode docker-secrets

5
推荐指数
1
解决办法
584
查看次数

Docker 机密是否比绑定安装提供任何额外的安全性?

据我了解,Dockersecrets和挂载(绑定和卷)都是在 Docker 容器内管理机密的安全方法。我想知道是否secrets有任何安全优势?

我有一组任意大小的秘密。这些秘密保存在文件夹中的单独文件中。它们会定期自动更改。我想让它们全部可供 Docker 容器使用。使用绑定挂载,我可以挂载它们的文件夹,并且它们都可以访问。使用secrets,我必须在 Docker Compose 文件中指定每一项,从而增加耦合性并降低可维护性。我有什么理由应该选择以牺牲secrets可维护性为代价来选择它吗?

docker devops docker-secrets

5
推荐指数
2
解决办法
1948
查看次数

如何保护 docker stack 中 CIFS 卷的凭据 - 秘密?

是否可以使用机密来存储用户名和密码,以便在堆栈 yaml 文件中的卷定义中使用?

如果是这样,怎么办?

如果不是,那么如何最好不必在 yaml 文件中包含凭据?

例如,我的堆栈包含如下部分......

networks:
  media-net:
    driver: overlay
    ipam:
      config:
        - subnet: 172.31.1.0/24

secrets:
  smb-user:
    external: true
    name: docker-smb-user
  smb-password:
    external: true
    name: docker-smb-password
...
volumes:
  media-movies:
    name: media-movies
    driver: local
    driver_opts:
      type: cifs
      device: "//storage.lan/media-movies"
      o: "addr=storage.lan,vers=3.0,username=/run/secrets/smb-user,password=/run/secrets/smb-password,uid=1000,gid=1000"

Run Code Online (Sandbox Code Playgroud)

我尝试在选项行中使用 /run/secrets/smb-user 等,但收到一个可能相关或不相关的错误。类似“没有到主机的路由”之类的东西。

我这里是否同时存在网络和凭据问题?覆盖层可以看到主机所在的 LAN 还是需要单独的定义?

我特别只使用 yaml 文件,因此所有定义都可以在 git 存储库中维护。

cifs docker docker-compose docker-swarm docker-secrets

5
推荐指数
1
解决办法
595
查看次数

Docker 秘密作为环境变量传递

我将 docker 置于群模式并执行以下操作

echo "'admin'" | docker secret create password -
docker service create \
--network="host" \
--secret source=password,target=password \
-e PASSWORD='/run/secrets/password' \
<image>
Run Code Online (Sandbox Code Playgroud)

我无法通过 docker 服务传递通过环境变量创建的密码秘密。

请帮我找出我哪里出错了

问候 Satyanvesh

docker docker-secrets

4
推荐指数
2
解决办法
9367
查看次数

为什么需要使用Swarm模式才能使用Docker机密?

我在玩一个单一的集装箱码头工人形象。我想在不使用compose的情况下将我的数据库密码存储为一个秘密(目前有该问题和Gradle的问题)。我以为即使不作文,我仍然可以使用秘密,但是当我尝试时,我得到了...

$ echo "helloSecret" | docker secret create helloS -
Run Code Online (Sandbox Code Playgroud)

来自守护程序的错误响应:该节点不是群集管理器。使用“ docker swarm init”或“ docker swarm join”将此节点连接到swarm,然后重试。

为什么我只需要使用群模式来使用秘密?为什么没有群集就不能使用它们?

docker docker-swarm docker-secrets

4
推荐指数
1
解决办法
857
查看次数

无法使用 Docker 访问机密 .net core

在我的 .net core Api 中,我使用 Secrets.json:

{"UserServiceSecretKey": "secretKey123456"}
Run Code Online (Sandbox Code Playgroud)

显然在我的 .csproj 中:

<PropertyGroup>
  <TargetFramework>netcoreapp3.1</TargetFramework>
  <UserSecretsId>6da803bf-439d-4e34-8735-195d652e8366</UserSecretsId>
  <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

并在我的 Startup.cs ConfigureServicesMethod() 中使用:

 var secretKey = Configuration["UserServiceSecretKey"];
        if (string.IsNullOrEmpty(secretKey))
            Console.WriteLine("Error: KEY UserServiceSecretKey cannot be null...");
Run Code Online (Sandbox Code Playgroud)

如果在 IISExpres 上运行该应用程序,它就可以工作(获取密钥)。

但是如果我像 docker-compose 这样在 docker 中运行 Api,那么在运行时将无法获得密钥在此输入图像描述

在我的docker-compose.override文件中,我有:

tresfilos.users.service:
environment: 
  - ASPNETCORE_ENVIRONMENT= Development
  - ASPNETCORE_URLS= https://+:443;http://+:80
ports:
  - "7002:80"
  - "7003:443"
volumes:
    - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
    - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
Run Code Online (Sandbox Code Playgroud)

另外,我定义了 APPDATA 环境变量:

在此输入图像描述

当我在 docker 中运行 Api 时如何访问密钥?

environment-variables docker docker-compose asp.net-core docker-secrets

4
推荐指数
1
解决办法
4037
查看次数

如何在 docker 镜像构建中挂载秘密文件并使用 Dockerfile 中秘密文件中的变量来验证命令?

有人可以提供以下命令的示例吗:

DOCKER_BUILDKIT=1 docker build --secret:id=mysecret,src=/local/secret ...
Run Code Online (Sandbox Code Playgroud)

我不知道安装后如何访问秘密文件中的变量。

例如:我想使用传递的秘密设置代理并运行安装命令

build docker dockerfile docker-secrets

4
推荐指数
1
解决办法
6567
查看次数

kubernetes 秘密在环境变量中有尾随空格

我在 GKE 上运行的 Kubernetes 1.9 中创建了一个部署,该部署利用了放入环境变量中的机密。我使用 yaml 文件将机密上传到 GKE,其中机密经过 Base64 编码。

我在容器中看到的是环境变量在那里,但值包含尾随空格。如果我设置一个值为“bar”的环境变量 FOO,它会是这样的,其中我在机密 yaml 中放入的 base64 将为“YmFyCg==”:

$ echo $FOO
bar 
$ echo \"$FOO\"
"bar "
$ echo $FOO | base64
YmFyCg==
$ echo "$FOO" | base64
YmFyIAo=
Run Code Online (Sandbox Code Playgroud)

这对于从环境变量中读取值的应用程序来说造成了无穷无尽的困难,这些变量期望在没有额外空格的情况下对值进行编码,例如POSTGRES_PASSWORD在图像POSTGRES_USERpostgres:9.6。环境中的其他变量(包括从我的部署 yaml 中设置的没有秘密的变量)不包含尾随空格;只有秘密才有问题。

kubernetes google-kubernetes-engine docker-secrets

3
推荐指数
1
解决办法
3022
查看次数

Docker:从秘密中设置 MSSQL 密码

我正在尝试从秘密中设置我的 MSSQL 密码,但我不知道为什么我似乎没有正确地将我的秘密设置为密码。

这是我的 YAML 文件:

version: '3.7'

services:
  notguiridb:
    image: mcr.microsoft.com/mssql/server:2019-latest
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_SA_PASSWORD_FILE: /run/secrets/mysecret4
    secrets:
      - source: mysecret4
        target: mysecret4

secrets:
  mysecret4:
    external: true
Run Code Online (Sandbox Code Playgroud)

然后我检查了这个秘密是否是我所期望的,但即使这样做它也说登录失败,所以我怀疑环境变量MSSQL_SA_PASSWORD_FILE并没有真正起作用。

$ docker exec -it 5fd bash
$ mssql@5fd8471a22c4:/$ cat /run/secrets/mysecret4
"Pa55W0rd!1234*"

$ docker exec -it 5fd /opt/mssql-tools/bin/sqlcmd -U sa -P Pa55w0rd!1234*
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'sa'..
$ docker exec -it 5fd /opt/mssql-tools/bin/sqlcmd -U sa -P "Pa55w0rd!1234*"
Sqlcmd: Error: Microsoft ODBC …
Run Code Online (Sandbox Code Playgroud)

sql-server docker docker-swarm docker-secrets

2
推荐指数
1
解决办法
4137
查看次数

Docker 和 MySQL:使用 docker-compose 文件不创建任何机密

我的 Docker 容器在运行时不断重启docker-compose up -d。使用 来检查日志时docker logs --tail 50 --follow --timestamps db,出现以下错误:

/usr/local/bin/docker-entrypoint.sh: line 37: "/run/secrets/db_mysql_root_pw": No such file or directory

这可能意味着没有秘密。的输出docker secret ls也不提供任何秘密。

我的 docker-compose.yml 文件看起来像这样(不包括端口信息等):

version: '3.4'
services:
  db:
    image: mysql:8.0
    container_name: db
    restart: always
    environment:
      - MYSQL_USER_FILE="/run/secrets/db_mysql_user"
      - MYSQL_PASSWORD_FILE="/run/secrets/db_mysql_user_pw"
      - MYSQL_ROOT_PASSWORD_FILE="/run/secrets/db_mysql_root_pw"
    secrets:
      - db_mysql_user
      - db_mysql_user_pw
      - db_mysql_root_pw
    volumes:
      - "./mysql-data:/docker-entrypoint-initdb.d"
secrets:
  db_mysql_user:
    file: ./db_mysql_user.txt
  db_mysql_user_pw:
    file: ./db_mysql_user_pw.txt
  db_mysql_root_pw:
    file: ./db_mysql_root_pw.txt
Run Code Online (Sandbox Code Playgroud)

在同一个目录中,我有 3 个文本文件,它们只包含环境变量的值。例如db_mysql_user_pw.txt包含password

我在 Windows 主机上运行 …

docker docker-compose docker-secrets

1
推荐指数
1
解决办法
1592
查看次数