无法在 Docker 中的 /run/secrets 中循环文件

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

在 Docker 中禁止循环访问

/run/secrets
中的文件;或者也许,
sh

我正在尝试在

ENTRYPOINT
调用的脚本中执行此操作:

#!/bin/sh
…
cd /run/secrets/users
ls -l # A list of files, proving that the secrets are present, is output.

for username in *; do
      echo "username is «$username»" # But $username is empty here.
done

ls -l
echo
的输出为:

(container name)  | total 8
(container name)  | -rw-r--r--    1 root     root             9 May 17 17:08 file1
(container name)  | -rw-r--r--    1 root     root             5 May 17 17:08 file2
(container name)  | username is «»
  • docker 镜像构建于
    alpine
  • Docker 版本 26.1.3,构建 b72abbb。
  • Docker Compose 版本 v2.27.0。

我期望变量

username
将包含
/run/secrets/users
中每个文件的名称。

docker sh alpine-linux
1个回答
0
投票

假设你的项目目录如下所示:

├── Dockerfile
├── entrypoint.sh
├── file1
├── file2
└── file3

入口点脚本与问题中的相同:

#!/bin/sh

cd /run/secrets/users
ls -l

for username in *; do
      echo "username is «$username»"
done

您没有提供

Dockerfile
,但这可以完成工作:

FROM alpine:latest

COPY file* /run/secrets/users/

COPY entrypoint.sh .

ENTRYPOINT ["sh", "entrypoint.sh"]

运行这样的东西:

docker build -t secrets . && docker run -it secrets

这会将文件复制到图像上。

enter image description here

您可以通过与正在运行的容器共享卷来使其更加灵活。更改项目结构:

├── Dockerfile
├── entrypoint.sh
└── users
    ├── file1
    ├── file2
    └── file3

现在将

users
文件夹安装为卷。

docker build -t secrets .
docker run -it -v ./users/:/run/secrets/users/ secrets

这是一种更灵活的方法,因为您在添加或更改用户文件时不需要重建映像。

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