
该Dockerfile允许构建用于部署自己的Hub实例的镜像。已在Fedora 23和CentOS 7上测试通过。
请记住经常备份数据目录,尤其是在升级到新版本之前。
shdocker run -it -p 8080:8080 agross/hub
http://localhost:8080。确定Hub数据和日志的存储位置,设置域名/服务器名和公共端口:
shHUB_DATA="/var/data/hub" HUB_LOGS="/var/log/hub" DOMAIN=example.com PORT=8010
在容器外部创建用于存储数据和日志的目录:
shmkdir --parents "$HUB_DATA/backups" \ "$HUB_DATA/conf" \ "$HUB_DATA/data" \ "$HUB_LOGS"
Dockerfile会创建hub用户和组,其UID和GID均为4000。需在主机系统添加具有此UID和GID的用户,并允许该用户读写$HUB_DATA和$HUB_LOGS目录。主机用户和组的名称不重要:
sh# 在Docker主机创建hub组和用户,例如: groupadd --gid 4000 --system hub useradd --uid 4000 --gid 4000 --system --shell /sbin/nologin --comment "JetBrains Hub" hub # 4000是Dockerfile创建的hub用户和组的ID chown -R 4000:4000 "$HUB_DATA" "$HUB_LOGS"
注意: 卷挂载中的:z选项确保目录的SELinux上下文被正确设置。
需要绑定挂载/etc/localtime以使用与Docker主机相同的时区:
shdocker create -it -p $PORT:8080 \ -v /etc/localtime:/etc/localtime:ro \ -v "$HUB_DATA/backups:/hub/backups:z" \ -v "$HUB_DATA/conf:/hub/conf:z" \ -v "$HUB_DATA/data:/hub/data:z" \ -v "$HUB_LOGS:/hub/logs:z" \ --name hub \ agross/hub
创建/etc/systemd/system/hub.service:
shcat <<EOF > "/etc/systemd/system/hub.service" [Unit] Description=JetBrains Hub Requires=docker.service After=docker.service [Service] Restart=always # 当执行docker stop时,docker-entrypoint.sh的trap+wait组合会生成143的退出状态码(128+15,即SIGTERM) # 更多信息:http://veithen.github.io/2014/11/16/sigterm-propagation.html SuccessExitStatus=143 PrivateTmp=true ExecStart=/usr/bin/docker start --attach=true hub ExecStop=/usr/bin/docker stop --time=60 hub [Install] WantedBy=multi-user.target EOF systemctl enable hub.service systemctl start hub.service
创建/etc/logrotate.d/hub:
shcat <<EOF > "/etc/logrotate.d/hub" $HUB_LOGS/*.log $HUB_LOGS/dashboard/*.log $HUB_LOGS/hub/*.log $HUB_LOGS/hub/logs/*.log $HUB_LOGS/internal/services/bundleProcess/*.log $HUB_LOGS/project-wizard/*.log { rotate 7 daily dateext missingok notifempty sharedscripts copytruncate compress } EOF
创建/etc/nginx/conf.d/hub.conf:
shcat <<EOF > "/etc/nginx/conf.d/hub.conf" upstream hub { server localhost:$PORT; } server { listen 80; listen [::]:80; server_name $DOMAIN; access_log /var/log/nginx/$DOMAIN.access.log; error_log /var/log/nginx/$DOMAIN.error.log; # 不限制上传大小 client_max_body_size 0; # 避免HTTP 411错误:参见issue #1486 (https://github.com/dotcloud/docker/issues/1486) chunked_transfer_encoding on; location / { proxy_pass http://hub; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-Host \$http_host; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; proxy_http_version 1.1; } } EOF nginx -s reload
确保SELinux策略允许Nginx访问端口$PORT(步骤3中-p $PORT:8080的第一部分):
shif [ $(semanage port --list | grep --count "^http_port_t.*$PORT") -eq 0 ]; then if semanage port --add --type http_port_t --proto tcp $PORT; then echo Added port $PORT as a valid port for nginx: semanage port --list | grep ^http_port_t else >&2 echo Could not add port $PORT as a valid port for nginx. Please add it yourself. More information: http://axilleas.me/en/blog/2013/selinux-policy-for-nginx-and-gitlab-unix-socket-in-fedora-19/ fi else echo Port $PORT is already a valid port for nginx: semanage port --list | grep ^http_port_t fi
按照JetBrains Hub安装说明的步骤进行配置,使用容器内的以下路径:
/hub/backups/hub/data/hub/logs/hub/tempshdocker pull agross/hub systemctl stop hub.service # 备份$HUB_DATA tar -zcvf "hub-data-$(date +%F-%H-%M-%S).tar.gz" "$HUB_DATA" docker rm hub # 重复步骤4创建新镜像 docker create ... systemctl start hub.service
shdocker build --tag agross/hub:testing . docker images # 应包含: # REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE # agross/hub testing 0dcb8bf6093f 49 seconds ago 405.4 MB
shTEST_DIR="/tmp/hub-testing" mkdir --parents "$TEST_DIR/backups" \ "$TEST_DIR/conf" \ "$TEST_DIR/data" \ "$TEST_DIR/logs" chown -R 4000:4000 "$TEST_DIR"
注意: 卷挂载中的:z选项确保目录的SELinux上下文被正确设置。
shdocker run -it --rm \ --name hub-testing \ -p 8080:8080 \ -v "$TEST_DIR/backups:/hub/backups:z" \ -v "$TEST_DIR/conf:/hub/conf:z" \ -v "$TEST_DIR/data:/hub/data:z" \ -v "$TEST_DIR/logs:/hub/logs:z" \ agross/hub:testing
shdocker exec -it hub-testing bash
注意: 卷挂载中的:z选项确保目录的SELinux上下文被正确设置。
shdocker run -it -v "$TEST_DIR/backups:/hub/backups:z" \ -v "$TEST_DIR/conf:/hub/conf:z" \ -v "$TEST_DIR/data:/hub/data:z" \ -v "$TEST_DIR/logs:/hub/logs:z" \ agross/hub:testing bash
不挂载数据目录:
shdocker run -it agross/hub:testing bash
shdocker ps -aq --no-trunc --filter ancestor=agross/hub:testing | xargs --no-run-if-empty docker rm docker images -q --no-trunc agross/hub:testing | xargs --no-run-if-empty docker rmi rm -rf "$TEST_DIR"
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务