【发布时间】:2021-01-01 14:49:33
【问题描述】:
我正在尝试运行 gitlab docker 映像。我遇到了已经在使用的端口的问题。
错误:对于 gitlab_web_1 无法启动服务 web:驱动程序失败 在端点 gitlab_web_1 上编程外部连接 (a22b149b76f705ec3e00c7ec4f6bcad8f0e1b575aba1dbf621c4edcc4d4e5508): 启动用户态代理时出错:listen tcp 0.0.0.0:22: bind: address 已经在使用中
这是我的 docker-compose.yml:
web:
image: 'gitlab/gitlab-ee:latest'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.example.com'
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
我之前对端口 80 和 443 有相同的错误消息。 为了修复它,我从我的服务器中删除了 apache。 但是我需要22端口ssh连接,所以不知道怎么弄出来...
- 是否可以让 apache 和 docker 容器使用相同的端口运行?
- 为什么
gitlab/gitlab-ee需要端口22?
【问题讨论】:
-
1) 不,在一台机器上,每个端口只能被一项服务绑定。如果您需要在同一个端口上提供多个服务,则需要反向代理之类的东西。 2)可能容器提供了通过 ssh 与 git 通信的可能性 ...
-
好的@derpirscher,但我应该能够在多个子域上使用相同的端口。那么为什么不 www.example.com 使用端口 80/443 用于 web 和 example.com 使用端口 22 用于 ssh,那么 gitlab.example.com 可以使用相同的端口?
-
您可能会想到一个服务于多个域的 apache 服务器。但这只是一项服务。这只是一个过程。如果您希望主机上的 apache 和容器中的 apache 监听同一个端口,这是不可能的,因为这将是两个服务/进程试图绑定同一个板。
-
在此处阅读可能的解决方法stackoverflow.com/q/1694144/3776927
-
一个非常简单的解决方法(如果它适用于您的情况),无需更改图像的配置,就是进行端口映射,如
8443:443、8080:80和2222:22,它将连接端口 8443您的主机到容器中的端口 443。当然,那么每个人都需要使用端口 8443、8080 或 2222 来连接容器。但是您可以通过端口 443、80 和 22 连接到主机。
标签: docker docker-compose gitlab port docker-container