将 Docker Secrets 与 Docker-Rootless 和 Docker Compose 结合使用

将 Docker Secrets 与 Docker-Rootless 和 Docker Compose 结合使用

我在 Ubuntu 20.04 上运行 docker-rootless 和 docker-compose 2.2.3

问题

无法将 Docker Secrets 与 Docker Compose 2.2.3 一起使用 没有创建一个群体

操作系统版本/版本 - Docker 客户端:Docker Engine - 社区版本:20.10.13 API 版本:1.41 Go 版本:go1.16.15 Git 提交:a224086 构建时间:2022 年 3 月 10 日星期四 14:07:51 OS/Arch:linux/amd64 上下文:默认实验:true

服务器:Docker Engine - 社区引擎:版本:20.10.13 API 版本:1.41(最低版本 1.12)Go 版本:go1.16.15 Git 提交:906f57f 构建时间:2022 年 3 月 10 日星期四 14:05:44 OS/Arch:linux/amd64 实验:false containerd:版本:1.5.10 GitCommit:2a1d4dbdb2a1030dc5b01e96fb110a9d9f150ecc runc:版本:1.0.3 GitCommit:v1.0.3-0-gf46b6ba docker-init:版本:0.19.0 GitCommit:de40ad0

操作系统版本/版本 - Docker Compose'' Docker Compose 版本 v2.2.3

重现步骤

1.)根据 ubuntu 20.04.4 上的文档安装 docker-rootless 和 docker-compose

2.)然后执行:

$ echo "nextcloud" | docker secret create mysql_database -
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

根据阅读,我认为使用 Docker Compose 1.11 以上版本,用户可以在 Docker Compose 中指定机密,而无需使用 Swarm。

这是使用 docker-rootless 运行 docker compose 的限制吗?如果不是,我该如何生成要在 docker-compose.yml 中使用的机密?

这是我当前的 yaml:

version: '3.9'

secrets:
  mysql_password:  
    external: true
  mysql_user:
    external: true
  mysql_database:
    external: true
  mysql_root_password:
    external: true
  redis_host_password:
    external: true
#  smtp_password:
#    external: true

volumes:
  nextcloud:
  mariadb:
  redis:
  phpmyadmin:
  
services:
  mariadb:
    image: mariadb:latest
    secrets:
      - mysql_root_password
      - mysql_password
      - mysql_database
      - mysql_user
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - ./mariadb:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_root_password
      - MYSQL_PASSWORD=/run/secrets/mysql_password
      - MYSQL_DATABASE=/run/secrets/mysql_database
      - MYSQL_USER=/run/secrets/mysql_user
    networks:
      - test-aym
  phpmyadmin:
    image: phpmyadmin:latest
    secrets:
      - mysql_root_password
    restart: always
    ports:
      - 8081:80
    environment:
      - PMA_HOST=mariadb
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_root_password
    networks:
      - test-aym
  redis:
    image: redis:6.2-alpine
    restart: always
    volumes: 
      - ./redis/redis-conf:/var/lib/redis
      - ./redis/cache:/data
    networks:
      - test-aym
  
  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    depends_on:
      - mariadb
      - redis
      - phpmyadmin
    secrets:
      - mysql_password
      - mysql_database
      - mysql_user
      - redis_host_password
    volumes:
      - ./nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
      - MYSQL_DATABASE_FILE=/run/secrets/mysql_database
      - MYSQL_USER_FILE=/run/secrets/mysql_user
      - MYSQL_HOST=mariadb
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_HOST_PASSWORD_FILE=/run/secrets/redis_host_passowrd
      - NEXTCLOUD_DATA_DIR=./private/data
      #- NEXTCLOUD_TRUSTED_DOMAINS=asiliyamama.local
      #- TRUSTED_PROXIES=172.18.0.0/16
      - SMTP_HOST=
      - SMTP_SECURE= 
      - SMTP_PORT=
      - SMTP_AUTHTYPE=
      - SMTP_NAME=
      - SMTP_PASSWORD=
      - MAIL_FROM_ADDRESS= 
      - MAIL_DOMAIN=
    networks:
      - test-aym
    
 

volumes:
  nextcloud:
  redis:
  phpmyadmin:

networks:
  test-aym:
    external: true

答案1

首先,你应该确保由docker-compose.yml启动的容器在swarm集群中运行,因为根据官方网站

此命令与 Swarm 协调器配合使用

第二,如果你没有在docker swarm中,应该先创建集群,

之后,检查集群节点信息。docker node ls

  • 你会得到类似的结果,比如:

在此处输入图片描述

然后转到领导节点swarm 集群。创建 secret 并在 docker-compose.yml 文件中引用它

我确信一切都会好起来的。

相关内容