我在 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 文件中引用它
我确信一切都会好起来的。