You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在docker-compose与Python应用中使用Docker Secrets时遇路径不存在错误

Docker Swarm中使用Secret时/run/secrets目录不存在的问题

我尝试用Docker Secret存储用户名和密码,操作步骤如下:

  1. 初始化Docker Swarm
docker swarm init
  1. 创建Docker Secrets
echo "username" | docker secret create app_username -
echo "password" | docker secret create app_password -
  1. 更新docker-compose.yml文件,内容如下:
version: "3.8"

secrets:
  app_username:
    external: true
  app_password:
    external: true

services:
  backend:
    container_name: lxd-backend
    build:
      context: ./backend
      dockerfile: backend.dockerfile
    image: lce-backend:latest
    env_file:
      - .env
    ports: 
      - 8085:80
    secrets:
      - app_username
      - app_password
    environment:
      - SERVER_NAME=localhost
      - SERVER_HOST=https://localhost
      - APP_USER_FILE=/run/secrets/app_username
      - APP_PW_FILE=/run/secrets/app_password

之后在Python脚本中执行以下代码:

print("file: ", os.listdir('/run/secrets/'),flush=True)

但出现错误:cannot access /run/secrets: no such file or directory,请问哪里操作有误?


问题原因及解决办法

核心问题在于你用了普通的docker-compose up命令部署服务,而非Swarm模式的部署命令。Docker Compose的单机模式不会处理Swarm Secrets,只有通过Swarm栈部署的服务才会自动将Secrets挂载到/run/secrets/目录下。

正确部署步骤:

  1. 先确认Swarm集群状态正常,执行docker node ls查看节点状态为Ready
  2. 替换部署命令为Swarm栈部署:
docker stack deploy -c docker-compose.yml <自定义栈名称>

额外注意事项:

  • 删除container_name: lxd-backend配置:Swarm模式不支持自定义容器名称,强行指定会导致部署报错
  • 确认Secrets存在:执行docker secret ls检查app_username和app_password在列表中
  • 确保Docker版本兼容:Docker 19.03+完全支持Compose 3.8格式,版本过低建议升级

按上述步骤部署后,容器内的/run/secrets/目录会正常生成,Python脚本也能读取到对应的Secret文件。

内容的提问来源于stack exchange,提问作者Kuni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:45:37