无法为GitLab Docker容器配置自定义SSH端口
GitLab Docker容器自定义SSH端口失败的原因分析
你遇到的问题核心是混淆了GitLab仓库地址显示端口和容器内SSH服务的实际监听端口,具体原因如下:
1. 容器内SSH服务默认监听22端口
GitLab容器中的sshd服务默认监听22端口,你设置gitlab_rails['gitlab_shell_ssh_port'] = 2424只是让GitLab在生成项目SSH克隆地址时显示2424端口,但容器内部的SSH服务根本没有修改监听端口。此时你做2424:2424的端口映射,容器内的2424端口没有任何服务在运行,自然会出现Connection refused错误。
2. GITLAB_OMNIBUS_CONFIG未生效的可能原因
你看到/etc/gitlab/gitlab.rb中相关配置仍为注释状态,大概率是因为:
- 部分arm64架构的GitLab镜像(比如你用的
yrzr/gitlab-ce-arm64v8)对GITLAB_OMNIBUS_CONFIG环境变量的解析逻辑存在差异,导致配置未正确写入gitlab.rb; - 你手动修改
gitlab.rb后执行gitlab-ctl reconfigure,该命令会根据GITLAB_OMNIBUS_CONFIG重新生成配置文件,覆盖你手动修改的内容,所以之前的修改无效。
3. 正确自定义SSH端口的配置方式
如果要真正让GitLab容器使用2424作为SSH端口,需要同时修改两个配置:
- 让容器内的
sshd服务监听2424端口; - 让GitLab生成的仓库地址显示2424端口。
对应的Docker Compose配置应该补充sshd['port']设置:
services: gitlab: image: 'yrzr/gitlab-ce-arm64v8:latest' container_name: '<container_name>' restart: always environment: GITLAB_OMNIBUS_CONFIG: | external_url '<external_url>' sshd['port'] = 2424 # 让容器内sshd监听2424 gitlab_rails['gitlab_shell_ssh_port'] = 2424 # 让GitLab显示正确的SSH端口 ports: - '2424:2424' # 其他必要端口映射...
你最后改用2424:22的映射方式能正常工作,是因为此时容器内的sshd仍监听22端口,外部2424端口直接转发到容器内的22端口,绕开了修改容器内sshd端口的步骤,这也是最简便的折中方案。
内容的提问来源于stack exchange,提问作者A_Weierstrass
相关产品推荐
相关产品推荐

