Docker:用 docker-compose 中的 Secret 替换文件内容

问题描述 投票:0回答:2

我正在尝试使用 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

docker-compose

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
2个回答
0
投票

我最终创建了这个

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

0
投票

我遇到了类似的问题,并使用 docker build Secrets解决了它:

WORKDIR /etc/icinga2/conf.d
COPY icinga2/api-users.conf .
RUN --mount=type=secret,required=true,id=ICINGA_API_ROOT_PASSWORD \
    ICINGA_API_ROOT_PASSWORD=$(cat /run/secrets/ICINGA_API_ROOT_PASSWORD) \
    sed --regexp-extended --in-place "s/\<ICINGA_API_ROOT_PASSWORD\>/$(cat /run/secrets/ICINGA_API_ROOT_PASSWORD)/" api-users.conf

我仍然不知道它是否足够优雅,因为有重复的代码,但它可以工作。 如果我正确理解文档,人们总是必须安装秘密才能使用它。

© www.soinside.com 2019 - 2024. All rights reserved.