我有一个 Docker 设置,其中包括一个 php-fpm 容器、一个 node 容器和一个作为代理的 nginx 容器。现在在浏览器中(http://project.dev),php 容器响应了像我预期的那样的 json。一切都很好。然而,当我从 node 容器向此 php 容器发出请求(view code)时,我会在请求上收到一个错误:
ECONNRESET
。因此,显然,node 容器无法与 php 容器通信。nginx 错误似乎没有添加任何条目。Error: read ECONNRESET at _errnoException(util.js: 1031: 13) at TCP.onread(net.js: 619: 25)
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read'
有什么想法吗?
我已经创建了一个 Github 仓库:https://github.com/thomastilkema/docker-nginx-php-fpm-node
docker-compose.yml(查看文件) 的精简版本
nginx:
depends_on:
- php-fpm
- node
networks:
- app
ports:
- 80:80
php-fpm:
networks:
- app
node:
networks:
- app
networks:
app:
driver: overlay
http {
upstream php-fpm {
server php-fpm:9000;
}
upstream node {
server node:4000;
}
server {
listen 80 reuseport;
server_name api.project.dev;
location ~ \.php$ {
fastcgi_pass php-fpm;
...
}
}
server {
listen 80;
server_name project.dev;
location / {
proxy_pass http://node;
}
}
}
FROM php:7.1-fpm-alpine
WORKDIR /var/www
EXPOSE 9000
CMD ["php-fpm"]
出现错误的请求
const response = await axios.get('http://php-fpm:9000');
如何复现
- 创建一个Swarm管理节点(和一个工作节点)
- 查找您的Swarm管理节点的IP地址(通常为
192.168.99.100
):docker-machine ip manager
或docker-machine ls
。通过添加192.168.99.100 project.dev
和192.168.99.100 api.project.dev
编辑您的主机文件(在Mac上,sudo vi /private/etc/hosts
) git clone https://github.com/thomastilkema/docker-nginx-php-fpm-node project
cd project ./scripts/up.sh
- 查看容器的日志:
docker logs <container-id> -f