Gogs 容器内的进程由 S6 管理,S6 会启动 syslogd, crond, openssh 以及 gogs 四个服务,并且这四个服务一定会启动。
而 Gogs 程序内部还有一个内建的 SSH server。
这会导致,如果用户也启用了内建的 SSH server 就会导致容器内有两个 SSH server: 一个是只监听容器内 22 端口的 openssh server;另一个是监听端口可以由用户指定的,Gogs 内建的 SSH server。
这两个 SSH 服务的端口对 docker-run 中 -p 参数的影响是:
Gogs 配置文件 app.ini 中 /SSH_PORT/ 字段的值就是 Gogs 内建 SSH server 监听的端口,它还代表 WebUI 上显示的 SSH server 的端口。所以在使用 docker-run 的 -p <host-port>:<containre-port>
参数时, <host-port>
和 SSH_PORT
字段的值保持一致才能让 WebUI 也显示正确的端口。
前面提到了,openssh server 监听的端口不可被修改,所以,如果使用 docker run --network host
参数的话,容器内 openssh server 监听的端口可能与主机上 openssh server 监听的端口冲突,从而报错。