突然,我在 TYPO3 实例上遇到了数据库连接问题(
An exception occurred in the driver: php_network_getaddresses: getaddrinfo for db failed: Temporary failure in name resolution
)。所以我想也许重新启动可以解决问题,因为我想不出我所做的事情导致了问题。但是重新启动后,我遇到了新问题:
ddev restart
Restarting project TYPO3...
Container ddev-TYPO3-db Removed
Container ddev-TYPO3-web Removed
Network ddev-typo3_default Removed
Network ddev-typo3_default Created
Container ddev-TYPO3-web Started
Container ddev-TYPO3-db Started
Error response from daemon: driver failed programming external connectivity on endpoint ddev-router (03945f5b287d05770888b6e6fbdfe19f9db63191243f9fdb2276b91e1d3411d0): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use
Failed to restart TYPO3: failed to start ddev-router: ComposeCmd failed to run 'COMPOSE_PROJECT_NAME=ddev-TYPO3 docker-compose -f /home/typo3/.ddev/.router-compose-full.yaml -p ddev-router up -d', action='[-p ddev-router up -d]', err='exit status 1', stdout='', stderr='Container ddev-router Creating
Container ddev-router Created
Container ddev-router Starting
Error response from daemon: driver failed programming external connectivity on endpoint ddev-router (03945f5b287d05770888b6e6fbdfe19f9db63191243f9fdb2276b91e1d3411d0): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use'
我的端口似乎有问题。对于设置,我遵循了以下设置:https://ddev.readthedocs.io/en/latest/users/topics/hosting/
使用命令
docker ps -a
我得到以下结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39b8ee782ba0 drud/ddev-router:v1.21.5-built "/app/docker-entrypo…" 8 minutes ago Created ddev-router
07372d7725d1 drud/ddev-dbserver-mariadb-10.4:v1.21.5-TYPO3-built "/docker-entrypoint.…" 8 minutes ago Up 8 minutes (healthy) 127.0.0.1:49162->3306/tcp ddev-TYPO3-db
a8c012aa3b04 drud/ddev-webserver-prod:v1.21.5-TYPO3-built "/start.sh" 8 minutes ago Up 8 minutes (healthy) 127.0.0.1:49160->80/tcp, 127.0.0.1:49159->443/tcp ddev-TYPO3-web
我觉得这样就好了。
sudo lsof -i:443
和 sudo lsof -i:80
返回:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2819 root 6u IPv4 39640 0t0 TCP <hiding>.plesk.page:https (LISTEN)
nginx 2820 nginx 6u IPv4 39640 0t0 TCP <hiding>.plesk.page:https (LISTEN)
我也尝试杀死
nginx
并停止apach2
并重新开始ddev
,但它也会开始nginx
。
sudo kill 2819 && sudo service apache2 stop && ddev restart
Restarting project TYPO3...
Container ddev-TYPO3-db Removed
Container ddev-TYPO3-web Removed
Network ddev-typo3_default Removed
Network ddev-typo3_default Created
Container ddev-TYPO3-web Started
Container ddev-TYPO3-db Started
Error response from daemon: driver failed programming external connectivity on endpoint ddev-router (b51bba1702f68372784247c0bc1a964d547905e2b6badf49a55ac0f1261bf9bf): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use
Failed to restart TYPO3: failed to start ddev-router: ComposeCmd failed to run 'COMPOSE_PROJECT_NAME=ddev-TYPO3 docker-compose -f /home/typo3/.ddev/.router-compose-full.yaml -p ddev-router up -d', action='[-p ddev-router up -d]', err='exit status 1', stdout='', stderr='Container ddev-router Creating
Container ddev-router Created
Container ddev-router Starting
Error response from daemon: driver failed programming external connectivity on endpoint ddev-router (b51bba1702f68372784247c0bc1a964d547905e2b6badf49a55ac0f1261bf9bf): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use'
现在我不知道我有什么或在哪里配置。
致以诚挚的问候,感谢您的帮助
好吧,有些奇怪的事情。我无法从 Ubuntu 中删除
nginx
,因为它尚未安装。所以,我不知道为什么 nginx 被列为命令。但我可以通过终止进程并立即通过 docker 启动容器来解决问题。数据库连接现在也可以工作了。我对该解决方案不满意,但我的服务器实例目前正在运行。如果您对我必须重新配置的内容有任何想法,请告诉我。
这基本上是一个
ddev
/docker
问题,与 TYPO3 无关。
ddev 启动会注意到
nginx
,因为它是全局 ddev router
容器所使用的软件。由于端口冲突,该容器无法启动。
listen tcp4 0.0.0.0:443: bind: address already in use
这意味着,对于所有接口,其他东西都直接在端口 443 上运行。
ddev
项目有一个故障排除章节,专门针对占用的端口,可以在这里找到:https://ddev.readthedocs.io/en/latest/users/usage/troubleshooting/#web-server-ports-已被占用
端口检查命令的结果
$ sudo lsof -i:443 and sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2819 root 6u IPv4 39640 0t0 TCP <hiding>.plesk.page:https (LISTEN)
nginx 2820 nginx 6u IPv4 39640 0t0 TCP <hiding>.plesk.page:https (LISTEN)
表示有一个软件直接运行在您的主机上,名称为
<hiding>.plesk.page:https
。
您的服务器上安装/可用的
plesk
服务器管理软件是否有任何更改?如果是,则该软件包默认提供网络服务器。您需要在那里禁用它(如果可能) - 或者在非默认端口上运行 ddev 东西(重新配置 ddev),然后以某种方式代理它。
简而言之 - 您的系统上有冲突的软件。
我对 PLESK 或任何这些精美的管理面板软件并不坚定,因此无法提供更多帮助。
可能是 plesk 直接安装 ngnix,而不是从操作系统 (Ubunutu) 包中安装 - 或者将它们生成为 docker 容器。
您需要识别它以及该块来自哪里。如果不是直接在您的服务器上,您可以检查某些 docker 容器是否正在运行:
# display running container
$ docker ps
# display all container, even stopped container
$ docker ps -a
也许有一个容器挂在端口 80 和/或 443 上的绑定上。
如果它是 ddev 容器,它可能会以某种方式停滞。如果我没记错的话,ddev 文档中也对此进行了介绍(抱歉,我个人也没有使用 ddev)。
来自端口故障排除部分:
# Stop all Docker containers that might be using the port by running:
$ ddev poweroff && \
docker rm -f $(docker ps -aq)
# then restart docker (depends on your os, debian/ubuntu in newer
# version maybe
$ systemctl restart docker
# or for older versions
$ service docker restart
此外,也许您应该从此处的通用 ddev 故障排除列表开始:https://ddev.readthedocs.io/en/latest/users/usage/troubleshooting/#general-troubleshooting-strategies
一般故障排除策略
ddev poweroff
mkdir ~/tmp/testddev
cd ~/tmp/testddev
ddev config --auto
printf "<?php\nphpinfo();\n" > index.php
ddev start