代码之家  ›  专栏  ›  技术社区  ›  virsha

带Spring Boot应用程序的Docker Secret在Docker Swarm模式/运行/机密下不工作

  •  0
  • virsha  · 技术社区  · 8 年前

    我尝试为MySQL容器和SpringBoot应用程序设置数据库密码的环境变量,这通常在Docker机密中声明。

    echo "db_secured_password" | docker secret create secret -
    

    以下是配置文件:

    Spring引导应用程序的->application.yml

    db:
      name: my-db
      host: localhost
      port: 3306
      username: root
      password: /run/secrets/db-root-password
    spring:
      application:
        name: core-backend
      datasource:
        url: jdbc:mysql://${db.host}:${db.port}/${db.name}
        username: ${db.username}
        password: ${db.password}
    

    用于docker swarm模式下的docker堆栈->docker-compose.yml

    version: '3.1'
    
    services: 
    
      mysql-db:
        container_name: mysql-db
        image: mysql:8.0.12
        deploy:
          restart_policy:
            condition: on-failure
        volumes:
          - ./data/mysql:/var/lib/mysql
          - ./conf/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
        environment:
          - MYSQL_ROOT_PASSWORD=/run/secrets/db-root-password
          - MYSQL_DATABASE=my_db
        ports: 
          - "3306:3306"
        secrets: 
          - db-root-password
    
      spring-boot-app:
        container_name: spring-boot-app
        image: spring-boot-app:local
        environment:
          - DB_PASSWORD=/run/secrets/db-root-password
    # Also tried adding with the file as property name
    #     - DB_PASSWORD_FILE=/run/secrets/db-root-password
        ports:
          - "8080:8080"
        environment:
          HOST_NAME: localhost
        secrets: 
          - db-root-password
        depends_on:
          - mysql-db
    
    secrets:
      db-root-password:
        external: true
    

    我使用以下命令运行Docker堆栈:

    docker stack deploy --with-auth-registry -c docker-compose.yml test-stack 
    

    我无法得到 db-root-password 属性完全正确 在春季启动应用程序。当我检查 数据库根密码 我 获取值为 /run/secrets/db-root-password .

    有什么东西不见了吗? 如果我想以不同的方式重写环境变量的值?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Kwong Hung Yip    7 年前

    我们用“printf”代替“echo”解决了同样的问题,echo的问题是它会在docker秘密中留下一个新行字符。您可以参考docker secret create=>中的示例。 https://docs.docker.com/engine/reference/commandline/secret_create/

    另外,我还有一个将Docker秘密直接加载到Spring属性中的示例,例如“spring.datasource.password”=> https://github.com/kwonghung-YIP/spring-boot-docker-secret

        2
  •  0
  •   Soumen Mukherjee David F    8 年前

    我认为您需要从机密文件中挂载密码,请参阅下面的示例“在撰写中使用机密” https://docs.docker.com/engine/swarm/secrets/#build-support-for-docker-secrets-into-your-images

    推荐文章