我正在尝试使用docker-compose up
运行docker,但我仍然遇到此错误。
Removing storemagento_nginx_1
storemagento_redis_1 is up-to-date
storemagento_db_1 is up-to-date
storemagento_fpm_1 is up-to-date
Recreating f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_storemagento_nginx_1 ...
Recreating f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_storemagento_nginx_1 ... error
ERROR: for f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_f751fff8304c_storemagento_nginx_1 Cannot start service nginx: driver failed programming external connectivity on endpoint storemagento_nginx_1 (7b1963dbb7e3b5ea97394dce65168d4a591301fb834c489aad52a9c2ea4e6eb7): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error (Failure EADDRINUSE)
ERROR: for nginx Cannot start service nginx: driver failed programming external connectivity on endpoint storemagento_nginx_1 (7b1963dbb7e3b5ea97394dce65168d4a591301fb834c489aad52a9c2ea4e6eb7): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error (Failure EADDRINUSE)
ERROR: Encountered errors while bringing up the project.
这曾经很好用,但后来我通过brew安装了apache的更新版本,现在每次来回切换都会发生这种情况。我曾经能够尝试杀死所有的apache进程或重新启动,这似乎工作。但是现在我无法让端口80释放。如果我杀死在端口80上运行的所有进程,apache会消失一分钟,但之后再返回。
所以当我跑
时sudo lsof -i :80 | grep LISTEN
httpd 27987 root 4u IPv6 0xcfcc888f0ccae989 0t0 TCP *:http (LISTEN)
httpd 27992 _www 4u IPv6 0xcfcc888f0ccae989 0t0 TCP *:http (LISTEN)
这些过程继续回归。我试图创建一个别名,我可以使用它来正确杀死进程,如下所示。但我无法在终端工作。
alias stopall-port80="sudo kill -9 $(sudo lsof -i :80 | grep LISTEN | egrep -v 'PID' | awk '{print $2}' | sort -n | uniq)"
如果我只采用sudo lsof -i :80 | grep LISTEN | egrep -v 'PID' | awk '{print $2}' | sort -n | uniq
部分并将其放入终端,它会按预期产生正确的PID。但是,当我尝试运行别名stopall-port80
时,我得到bash: 27057: command not found
。
更新
这是有效的,而不是使用别名
stopall_port80() {
sudo kill -9 $(sudo lsof -i :80 | grep LISTEN | egrep -v 'PID' | awk '{print $2}' | sort -n | uniq);
}
答案 0 :(得分:1)
如果端口“释放一分钟”然后再次使用,则应告知进程监控系统启动冲突进程以停止运行该进程。对于MacOS上的Apache httpd,它看起来像:
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
您的原始代码是 - 由于使用了双引号 - 在您的别名定义时构建了httpd进程列表,而不是在您的别名<< EM>执行。您可以通过更改引用类型来解决这个问题,但更好的答案是使用函数:
stopall_port80() { sudo kill $(...); }
...会在运行该功能时对$(...)
进行评估,而不是在.bashrc
中设置时进行评估。
sudo lsof -n -iTCP:80 | awk '/LISTEN/ { print $2 }'