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

Docker容器中Secrets无法正确赋值MySQL密码问题求助

解决Docker Secret设置MySQL密码的问题

你的问题出在直接将secret文件路径作为MYSQL_ROOT_PASSWORD的值,MySQL会把这个字符串当作密码,而不会自动读取文件内容。MySQL官方镜像提供了专门的*_FILE系列环境变量,用来从文件中读取敏感信息,这才是配合Docker Secret的正确用法。

正确配置步骤

1. 修改MySQL服务的环境变量

将MYSQL_ROOT_PASSWORD替换为MYSQL_ROOT_PASSWORD_FILE,值保持为/run/secrets/databasePassword,MySQL会自动读取该secret文件的内容作为root密码。

2. 保留外部Secret声明

在yml文件末尾保留secrets配置,标记databasePassword为外部secret(因为你已经预先创建了这个secret)。

修改后的完整配置文件

version: '3.1'

services:
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped
    container_name: db-mysql
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 'false'
      # 使用_FILE后缀的环境变量读取secret文件内容
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/databasePassword
    ports:
      - 3306:3306
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 20s
      retries: 10
    secrets:
      - databasePassword

  beyond-phpmyadmin:
    image: phpmyadmin
    restart: unless-stopped
    container_name: beyond-phpmyadmin
    environment:
      PMA_HOST: db-mysql
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
    links:
      - db
    ports:
      - 8081:80

secrets:
  databasePassword:
    external: true

部署验证

使用docker stack deploy命令部署(Docker Secret仅支持swarm模式):

docker stack deploy -c your-compose-file.yml your-stack-name

部署完成后,即可通过phpMyAdmin使用密码123456登录MySQL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:20:32