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
相关产品推荐
相关产品推荐

