docker - 具有特定用户的 Gitlab CI 作业
问题描述
我正在尝试运行 anchore 引擎的 Gitlab CI 作业来扫描 docker 图像。脚本部分中的命令失败,错误为permission denied
. 我发现该命令需要root
用户权限。sudo 未安装在我使用的 docker 映像中,并且 docker 容器中gitlab runner
只有非 sudo 用户。anchore
下面是容器扫描的 CI 作业。
container_scan:
stage: scan
image:
name: anchore/anchore-engine:latest
entrypoint: ['']
services:
- name: anchore/engine-db-preload:latest
alias: anchore-db
variables:
GIT_STRATEGY: none
ANCHORE_HOST_ID: "localhost"
ANCHORE_ENDPOINT_HOSTNAME: "localhost"
ANCHORE_CLI_USER: "admin"
ANCHORE_CLI_PASS: "foobar"
ANCHORE_CLI_SSL_VERIFY: "n"
ANCHORE_FAIL_ON_POLICY: "true"
ANCHORE_TIMEOUT: "500"
script:
- |
curl -o /tmp/anchore_ci_tools.py https://raw.githubusercontent.com/anchore/ci-tools/master/scripts/anchore_ci_tools.py
chmod +x /tmp/anchore_ci_tools.py
ln -s /tmp/anchore_ci_tools.py /usr/local/bin/anchore_ci_tools
- anchore_ci_tools --setup
- anchore-cli registry add "$CI_REGISTRY" gitlab-ci-token "$CI_JOB_TOKEN" --skip-validate
- anchore_ci_tools --analyze --report --image "$IMAGE_NAME" --timeout "$ANCHORE_TIMEOUT"
- |
if ; then
anchore-cli evaluate check "$IMAGE_NAME"
else
set +o pipefail
anchore-cli evaluate check "$IMAGE_NAME" | tee /dev/null
fi
artifacts:
name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}
paths:
- image-*-report.json
ln -s /tmp/anchore_ci_tools.py /usr/local/bin/anchore_ci_tools
CI 作业在脚本部分失败。我试图在该entrypoint
部分添加用户
name: anchore/anchore-engine:latest
entrypoint: ['bash', '-c', 'useradd myuser && exec su myuser -c bash']
但它不允许创建用户。我试过在 linux 中运行 docker 容器,docker run -it --user=root anchore/anchore-engine:latest /bin/bash
它运行没有任何问题。如何在 gitlab-ci 工作中模拟相同的内容?
解决方案
推荐阅读
- mod-rewrite - Mod rewrite query parameter validation and blocking also request url blocking
- python - 如何在 django 上使用 curl 测试获取请求?
- c++ - 在头文件之外实现静态方法时未定义的引用
- c# - 通过反射在脚本组件中组装适用于随机情况
- java - 如何在Android中从url显示授权的pdf而不下载它?
- python-3.x - python中的多处理问题[OSError:[WinError 6]无效的驱动程序]
- c# - 在 EnumDropDownListFor / ListBoxFor 上绑定多个值
- ios - Amazon iOS 应用程序如何实时搜索产品?
- sql-server - AWS DMS 复制实例无法连接本地机器 SQL Server 测试端点
- javascript - console.log returning undefined in for loop