【问题标题】:Docker: replace file contents with secret in docker-composeDocker:用 docker-compose 中的秘密替换文件内容
【发布时间】:2021-01-21 07:29:22
【问题描述】:

我正在尝试使用 docker 和 docker-compose 设置包含架构和一些用户的数据库。用户是 Web 应用程序的系统用户,它需要密码以确保安全。 为此,我想我可以简单地将文件中的模板值替换为密钥中的值。但是,这不起作用。

用密钥中的值替换文件内容的正确方法是什么?

Dockerfile

FROM postgres:12.4
EXPOSE 5432
COPY 00_users.sql /docker-entrypoint-initdb.d/
COPY 01_schema.sql /docker-entrypoint-initdb.d/

RUN sed -i "s/__SECRETPASSWORD__/$(cat /run/secrets/postgres-secret)/g" /docker-entrypoint-initdb.d/00_users.sql

码头工人撰写

version: '3.1'
services:
  my-db:
    build: ./my-db
    container_name: my-postgres
    volumes:
      - ntool-data:/var/lib/postgresql/data
    ports:
      - 5432:5432
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgres-passwd
    secrets:
      - postgres-passwd
      - postgres-secret


secrets:
  postgres-passwd:
    file: postgres-passwd.txt
  postgres-secret:
    file: postgres-secret.txt

输出是:

Step 5/5 : RUN sed -i "s/__VCNTOOLPASSWORD__/$(cat /run/secrets/postgres-secret)/g" /docker-entrypoint-initdb.d/00_users.sql
 ---> Running in 012dd81c830b
cat: /run/secrets/postgres-secret: No such file or directory

【问题讨论】:

    标签: docker templates docker-compose docker-secrets


    【解决方案1】:

    我最终创建了这个00_users.sh 脚本并将其放入/docker-entrypoint-initdb.d/

    Dockerfile

     FROM postgres:12.4
     EXPOSE 5432
     COPY 00_users.sh /docker-entrypoint-initdb.d/
    

    内容:

    #!/bin/bash
    set -e
    
    MYPASS=$(cat /run/secrets/postgres-secret)
    
    
    psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
      CREATE USER secretuser SUPERUSER ;
      ALTER USER secretuser WITH PASSWORD '${MYPASS}';
    
    EOSQL
    

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2020-09-24
      • 1970-01-01
      相关资源
      最近更新 更多