簡體   English   中英

docker 中的秘密組成

[英]Secrets in docker compose

我的環境是 ubuntu 18.04 VPS。

我無法在 docker 容器中使用 mariadb 獲取基於文件的機密。

  1. 創建docker-compose.yml
version: '3.7'
services:
  db:
    image: mariadb:10.4.8-bionic
    environment:
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/password_root
      - MYSQL_PASSWORD_FILE=/run/secrets/password_user
      - MYSQL_DATABASE=database
      - MYSQL_USER=admin
    secrets:
      - password_root
      - password_user
secrets:
  password_root:
    file: .secret_password_root
  password_user:
    file: .secret_password_user
  1. 創建秘密:
echo -n secret > .secret_password_root
echo -n secret > .secret_password_user
chown root:root .secret_password*
chmod 400 .secret_password*

(請注意,我可以設置 444,但這會暴露主機上的機密文件,這是一個非常糟糕的主意。)

  1. 跑:
docker-compose up

錯誤:

db_1 | /usr/local/bin/docker-entrypoint.sh:第 37 行:/run/secrets/password_root:權限被拒絕

根據文檔,秘密文件應該掛載為0444 ,但這顯然沒有發生。

顯然,“docker compose” 不支持此功能,僅適用於“docker swarm”。 文檔具有誤導性。

Docker Compose 不支持真實(swarmkit)機密,並通過將文件直接綁定掛載到容器中來模仿它們(這意味着主機上的權限與容器中的權限相同)。

您可以更改主機上文件的所有權以匹配容器中用戶的 uid/gid,但不幸的是,我認為沒有什么可以做的

docker-compose v2.5.0以來,這現在是可能的。

Dockerfile:

# syntax=docker/dockerfile:1.2

RUN --mount=type=secret,id=mysecret,target=/root/mysecret cat /root/mysecret

docker-compose.yml

services:
  my-app:
    build:
      context: .
      secrets:
        - mysecret

secrets:
  mysecret:
   file: ~/.npmrc

Shell:

$ docker-compose build

要點在這里:

chown root:root .secret_password* # set root as owner
chown 400 .secret_password*       # set `400` as owner

chown替換為 `chmod:

chown root:root .secret_password*
chmod 400 .secret_password*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM