如何构建含自定义仓库的Artifactory Dockerfile并扩展官方镜像添加用户?
嘿,我刚好做过类似的需求,给你整理了一套完整的方案,用来扩展官方Artifactory OSS镜像,自动添加自定义本地仓库和带指定凭据的新用户,亲测能用:
扩展Artifactory OSS Docker镜像:自动配置仓库与用户
核心思路
Artifactory有个很实用的特性:启动时会自动执行/var/opt/jfrog/artifactory/etc/init.d目录下的脚本。我们可以利用这个机制,把创建仓库、用户的逻辑写成脚本,打包进自定义镜像里,让容器启动时自动完成配置。
步骤1:编写初始化脚本
创建一个名为init_artifactory.sh的脚本,里面包含等待Artifactory服务就绪、调用API创建仓库和用户的逻辑:
#!/bin/bash # 先等Artifactory服务完全启动,不然API调用会失败 wait_for_artifactory() { until curl -s http://localhost:8081/artifactory/api/system/ping | grep -q "OK"; do echo "等着Artifactory启动起来..." sleep 5 done } wait_for_artifactory # 默认管理员账号是admin/password,第一次启动后记得改! ADMIN_USER="admin" ADMIN_PASS="password" # ---------------------- 创建自定义本地仓库 ---------------------- REPO_NAME="my-local-docker-repo" REPO_TYPE="docker" # 换成maven、npm、generic等都可以 curl -u ${ADMIN_USER}:${ADMIN_PASS} -X PUT "http://localhost:8081/artifactory/api/repositories/${REPO_NAME}" \ -H "Content-Type: application/json" \ -d '{ "rclass": "local", "packageType": "'${REPO_TYPE}'", "description": "内部专用Docker镜像仓库", "notes": "用来存我们自己构建的镜像" }' # ---------------------- 创建新用户 ---------------------- USER_NAME="dev-user" USER_PASS="DevPass_2024!" # 替换成你需要的凭据 curl -u ${ADMIN_USER}:${ADMIN_PASS} -X POST "http://localhost:8081/artifactory/api/security/users/${USER_NAME}" \ -H "Content-Type: application/json" \ -d '{ "email": "dev-user@company.com", "password": "'${USER_PASS}'", "admin": false, "profileUpdatable": true, "groups": ["deployers"] # 给用户分配部署权限组,按需调整 }' echo "仓库和用户都创建好啦!"
步骤2:编写Dockerfile
基于官方镜像,把我们的脚本复制到指定目录:
FROM docker.bintray.io/jfrog/artifactory-oss:latest # 把初始化脚本复制到Artifactory的启动脚本目录 COPY init_artifactory.sh /var/opt/jfrog/artifactory/etc/init.d/ # 给脚本加上执行权限 RUN chmod +x /var/opt/jfrog/artifactory/etc/init.d/init_artifactory.sh
步骤3:构建并运行自定义镜像
- 构建镜像:
docker build -t my-custom-artifactory .
- 启动容器:
docker run -d -p 8081:8081 --name my-artifactory my-custom-artifactory
验证配置
容器启动后,你可以:
- 访问
http://localhost:8081/artifactory,用管理员账号登录,在Repositories菜单里找my-local-docker-repo - 进入Admin > Security > Users,查看
dev-user是否存在,也可以用这个账号登录试试凭据是否正确
生产环境注意事项
- 别在脚本里硬编码密码!可以改成环境变量传递,比如把
USER_PASS换成${USER_PASSWORD},启动时用-e USER_PASSWORD=你的密码传入 - 如果要创建多个仓库或用户,直接在脚本里加对应的curl命令就行
- 第一次启动后,一定要修改默认的管理员密码!
内容的提问来源于stack exchange,提问作者Heniek
相关产品推荐
相关产品推荐

