我正在尝试开发一个使用Age加密的Mozilla SOPS Docker容器。以下是我的文件:
./Dockerfile:
FROM alpine:latest
# Install sops
RUN wget https://github.com/mozilla/sops/releases/download/v3.8.1/sops-v3.8.1.linux.amd64 -O /usr/local/bin/sops \
&& chmod +x /usr/local/bin/sops
# Install age
RUN wget https://github.com/FiloSottile/age/releases/download/v1.1.1/age-v1.1.1-linux-amd64.tar.gz -O /usr/local/bin/age \
&& chmod +x /usr/local/bin/age
RUN export PATH=/usr/local/bin:${PATH}
# Copy the script to generate_sops_config.sh
COPY ./src/generate_sops_config.sh /app/config/generate_sops_config.sh
RUN chmod +x /app/config/generate_sops_config.sh
# Execute the script to generate .sops.yaml and private keys
RUN /app/config/generate_sops_config.sh
RUN chmod 600 /app/config/.sops.yaml
# Cleanup
RUN rm -f /app/config/generate_sops_config.sh
ENTRYPOINT ["sops"]
字符串
./generate_sops_config.sh:
#!/bin/bash
# Generate age key pair
age-keygen -o age_key.dev.txt
age-keygen -o age_key.prod.txt
# Extract the public key
prod_age_pubkey=$(cat age_key.dev.txt.pub)
prod_age_pubkey=$(cat age_key.prod.txt.pub)
# Update .sops.yaml with the public key
cat <<EOF > .sops.yaml
creation_rules:
- path_regex: \.dev\.yaml$
age: |
-----BEGIN AGE ENCRYPTED FILE-----
${dev_age_pubkey}
-----END AGE ENCRYPTED FILE-----
- path_regex: \.prod\.yaml$
age: |
-----BEGIN AGE ENCRYPTED FILE-----
${prod_age_pubkey}
-----END AGE ENCRYPTED FILE-----
EOF
型
./docker-compose.yml:
version: '3'
services:
sops-service:
build:
context: .
volumes:
- ./shared:/app/shared/
- ./config:/app/config/
型
这是第7/9层
=> [sops-service 6/9] RUN chmod +x /app/config/generate_sops_config.sh 0.3s
=> ERROR [sops-service 7/9] RUN /app/config/generate_sops_config.sh
型
我先创建两个空卷(./shared
和./config
),然后运行docker-compose up
。
有什么问题吗?我已经排除了大约一个半小时的故障,现在没有运气让Docker在构建过程中看到文件。
3条答案
按热度按时间kyvafyod1#
您的
generate_sops_config.sh
脚本以一个“shebang”行开始,它需要#!/bin/bash
。一个最小的基于Alpine的映像不包括GNU bash shell。但是,它看起来也不像您的脚本使用任何特定于Linux的特性;您应该能够在这里使用任何POSIX shell。如果你把“shebang”改为
字符串
对于更复杂的脚本,您需要确保避免特定于XML的特性,如数组类型变量,以及不必要的语法,如
function
或source
关键字。i7uq4tfw2#
简而言之:“未找到”并不是指文件
/app/config/generate_sops_config.sh
,而是指文件中提到的解释器/bin/bash
。generate_sops_config.sh
需要bash
(因此它在第一行中显示为#!/bin/bash
),而Alpine Linux映像没有预装bash
(因为Alpine希望小,而bash
很大)。RUN /app/config/generate_sops_config.sh
之前插入RUN apk update && apk add bash
;这将在映像中安装bash
(后面还有更多的问题;也许你必须做更多的
apk add
来满足依赖关系;但这是另一个问题。PS:你的问题写得很好,很容易复制!
a8jjtwal3#
为了记录在案,这是我的工作成果:
./Dockerfile
字符串
./src/generate_sops_config
型
./docker-compose.yml
型
谢谢你的帮助!