运行 docker,我遇到这个端口问题:
ERROR: for mmp_php_1 Cannot start service php: driver failed programming external connectivity on endpoint mmp_php_1 (80f0277f963830426b07e4ae461b8533864822fceb67263a78c27b4ae91d87f5): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
ERROR: for php Cannot start service php: driver failed programming external connectivity on endpoint mmp_php_1 (80f0277f963830426b07e4ae461b8533864822fceb67263a78c27b4ae91d87f5): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
ERROR: Encountered errors while bringing up the project.
然后我检查端口,发现有东西正在使用 80。
timothy@13-9360:~/Public/pub/mmp$ ps -eaf | grep 1380
root 1380 2 0 Nov04 ? 00:00:00 [hci0]
timothy 20779 9201 0 08:34 pts/18 00:00:00 grep --color=auto 1380
timothy@13-9360:~/Public/pub/mmp$ netstat -tlnp | grep 80
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp6 0 0 :::8080 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
我该如何终止此处正在运行的进程以便再次使用端口 80?
我的本地主机是 apache 登陆页面 atm,这很奇怪,因为我已经从我的电脑中删除了 apache。也不知道为什么会这样。
sudo netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:58347 0.0.0.0:* LISTEN 1029/rpc.mountd
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 2591/vino-server
tcp 0 0 127.0.0.1:63342 0.0.0.0:* LISTEN 16215/java
tcp 0 0 0.0.0.0:44814 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1019/rpcbind
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1089/nginx -g daemo
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 3036/dnsmasq
tcp 0 0 0.0.0.0:46357 0.0.0.0:* LISTEN 1029/rpc.mountd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 20431/cupsd
tcp 0 0 127.0.0.1:29754 0.0.0.0:* LISTEN 1268/vpnagentd
tcp 0 0 0.0.0.0:17500 0.0.0.0:* LISTEN 2696/dropbox
tcp 0 0 127.0.0.1:6942 0.0.0.0:* LISTEN 16215/java
tcp 0 0 0.0.0.0:42622 0.0.0.0:* LISTEN 1029/rpc.mountd
tcp 0 0 127.0.0.1:17600 0.0.0.0:* LISTEN 2696/dropbox
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:17603 0.0.0.0:* LISTEN 2696/dropbox
tcp6 0 0 :::5672 :::* LISTEN 18276/docker-proxy
tcp6 0 0 :::5900 :::* LISTEN 2591/vino-server
tcp6 0 0 :::59533 :::* LISTEN 1029/rpc.mountd
tcp6 0 0 :::42991 :::* LISTEN 1029/rpc.mountd
tcp6 0 0 :::111 :::* LISTEN 1019/rpcbind
tcp6 0 0 :::8080 :::* LISTEN 18412/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 1089/nginx -g daemo
tcp6 0 0 ::1:631 :::* LISTEN 20431/cupsd
tcp6 0 0 :::15672 :::* LISTEN 18260/docker-proxy
tcp6 0 0 :::47673 :::* LISTEN 1029/rpc.mountd
tcp6 0 0 :::17500 :::* LISTEN 2696/dropbox
tcp6 0 0 :::35324 :::* LISTEN -
tcp6 0 0 :::2049 :::* LISTEN -
我难道不应该像你说的那样只改变端口吗?
version: '3'
services:
php:
build: .
volumes:
- ./www:/var/www/html:delegated
- ./configs:/configs
links:
- db:db
- redis:redis
- rabbit:rabbit
- elasticsearch:elasticsearch
ports:
- "80:80"
- "443:443"
extra_hosts:
- "localhost.local:127.0.0.1"
environment:
- CONFIG__DEFAULT__CATALOG__SEARCH__ELASTICSEARCH_SERVER_HOSTNAME=elasticsearch
db:
image: mariadb
environment:
答案1
我曾经遇到过类似的问题。
另一个进程绑定到端口 80。
我必须找到罪魁祸首。我使用 netstat 查找哪个进程正在使用端口 80。
您可能需要安装包含以下内容的软件包网络状态:网络工具
sudo apt install net-tools -y
安装后,网络状态已安装,继续执行命令
sudo netstat -tlnp
我得到的是类似这样的信息:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::80 :::* LISTEN 4227/httpd
所以过程httpdID 为 4227 的进程使用 80 端口。我打开 htop,按 F3 启用搜索,输入 httpd,发现 nextcloud(一个文件存储云服务器)是使用 httpd(一个网页服务器)的父进程。
但是,接下来要做什么取决于您。您可能想更改它们使用的端口,然后在内部转发它们。或者只是删除使用该端口的应用程序或暂时禁用它。
我正在安装 Docker 来容器化我现有的服务器/服务等,因此我删除了 Nextcloud 快照,重新启动了 Docker。
sudo snap remove nextcloud
要重新启动 docker,我最初尝试过sudo systemctl restart docker
,但意识到那不是服务的名称,因为它是一个 Snap docker。
要找到服务的名称,我必须仔细检查 systemctl 状态:
sudo systemctl status | grep docker
并发现服务名称是snap.docker.dockerd.service
为了重新启动它,我使用了sudo systemctl restart snap.docker.dockerd.service
然后我再次尝试了我的 docker 命令,错误消失了。