
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
该Docker镜像用于部署JetBrains YouTrack项目管理与问题跟踪工具实例,已在Fedora 23和CentOS 7系统上测试通过。
重要提示:请定期备份数据目录,尤其是在升级到新版本之前。
http://docs.docker.io/en/latest/installation/%E3%80%82
运行容器(按CTRL-C停止):
shdocker run -it -p 8080:8080 agross/youtrack
打开浏览器访问 http://localhost:8080。
确定YouTrack数据和日志存储路径,设置域名/服务器名及公共端口:
shYOUTRACK_DATA="/var/data/youtrack" YOUTRACK_LOGS="/var/log/youtrack" DOMAIN=example.com PORT=8012
在容器外部创建用于存储数据和日志的目录:
shmkdir --parents "$YOUTRACK_DATA/backups" \ "$YOUTRACK_DATA/conf" \ "$YOUTRACK_DATA/data" \ "$YOUTRACK_LOGS"
Dockerfile会创建UID和GID均为5000的youtrack用户和组。需在主机系统创建具有相同UID/GID的用户,并赋予其对数据和日志目录的读写权限:
sh# 在Docker主机创建youtrack用户和组 groupadd --gid 5000 --system youtrack useradd --uid 5000 --gid 5000 --system --shell /sbin/nologin --comment "JetBrains YouTrack" youtrack # 设置目录权限(5000为Dockerfile中创建的用户ID) chown -R 5000:5000 "$YOUTRACK_DATA" "$YOUTRACK_LOGS"
注意:卷挂载中的
:z选项用于正确设置SELinux上下文(详情参见SELinux与Docker卷挂载)。
需挂载/etc/localtime以保持与主机相同的时区。
shdocker create -it -p $PORT:8080 \ -v /etc/localtime:/etc/localtime:ro \ -v "$YOUTRACK_DATA/backups:/youtrack/backups:z" \ -v "$YOUTRACK_DATA/conf:/youtrack/conf:z" \ -v "$YOUTRACK_DATA/data:/youtrack/data:z" \ -v "$YOUTRACK_LOGS:/youtrack/logs:z" \ --name youtrack \ agross/youtrack
创建/etc/systemd/system/youtrack.service文件:
shcat <<EOF > "/etc/systemd/system/youtrack.service" [Unit] Description=JetBrains YouTrack 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 youtrack ExecStop=/usr/bin/docker stop --time=60 youtrack [Install] WantedBy=multi-user.target EOF systemctl enable youtrack.service systemctl start youtrack.service
创建/etc/logrotate.d/youtrack文件:
shcat <<EOF > "/etc/logrotate.d/youtrack" $YOUTRACK_LOGS/*.log $YOUTRACK_LOGS/hub/*.log $YOUTRACK_LOGS/hub/logs/*.log $YOUTRACK_LOGS/youtrack/*.log $YOUTRACK_LOGS/youtrack/logs/*.log $YOUTRACK_LOGS/internal/services/bundleProcess/*.log { rotate 7 daily dateext missingok notifempty sharedscripts copytruncate compress } EOF
创建/etc/nginx/conf.d/youtrack.conf文件:
shcat <<EOF > "/etc/nginx/conf.d/youtrack.conf" upstream youtrack { 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错误(详情:https://github.com/dotcloud/docker/issues/1486) chunked_transfer_encoding on; location / { proxy_pass http://youtrack; 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; } location /api/eventSourceBus { proxy_pass http://youtrack; 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; proxy_cache off; proxy_buffering off; proxy_read_timeout 86400s; proxy_send_timeout 86400s; proxy_set_header Connection ''; chunked_transfer_encoding off; } } EOF nginx -s reload
确保SELinux策略允许Nginx访问$PORT(步骤4中-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 YouTrack安装指南进行配置,容器内相关路径如下:
/youtrack/backups/youtrack/data/youtrack/logs/youtrack/tempshdocker pull agross/youtrack systemctl stop youtrack.service # 备份数据目录 tar -zcvf "youtrack-data-$(date +%F-%H-%M-%S).tar.gz" "$YOUTRACK_DATA" docker rm youtrack # 重复步骤4创建新容器 docker create ... systemctl start youtrack.service
shdocker build --tag agross/youtrack:testing . docker images # 应显示: # REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE # agross/youtrack testing 0dcb8bf6093f 49 seconds ago 405.4 MB
shTEST_DIR="/tmp/youtrack-testing" mkdir --parents "$TEST_DIR/backups" \ "$TEST_DIR/conf" \ "$TEST_DIR/data" \ "$TEST_DIR/logs" chown -R 5000:5000 "$TEST_DIR"
注意:卷挂载中的
:z选项用于正确设置SELinux上下文。
shdocker run -it --rm \ --name youtrack-testing \ -p 8080:8080 \ -v "$TEST_DIR/backups:/youtrack/backups:z" \ -v "$TEST_DIR/conf:/youtrack/conf:z" \ -v "$TEST_DIR/data:/youtrack/data:z" \ -v "$TEST_DIR/logs:/youtrack/logs:z" \ agross/youtrack:testing
shdocker exec -it youtrack-testing bash
带数据目录挂载:
shdocker run -it -v "$TEST_DIR/backups:/youtrack/backups:z" \ -v "$TEST_DIR/conf:/youtrack/conf:z" \ -v "$TEST_DIR/data:/youtrack/data:z" \ -v "$TEST_DIR/logs:/youtrack/logs:z" \ agross/youtrack:testing bash
不带数据目录挂载:
shdocker run -it agross/youtrack:testing bash
shdocker ps -aq --no-trunc --filter ancestor=agross/youtrack:testing | xargs --no-run-if-empty docker rm docker images -q --no-trunc agross/youtrack:testing | xargs --no-run-if-empty docker rmi rm -rf "$TEST_DIR"
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

来自真实用户的反馈,见证轩辕镜像的优质服务