我有一个 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 (view file) 的修剪版本
nginx:
depends_on:
- php-fpm
- node
networks:
- app
ports:
- 80:80
php-fpm:
networks:
- app
node:
networks:
- app
networks:
app:
driver: overlay
nginx.conf (view file) 的修剪版本
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;
}
}
}
php-fpm/Dockerfile (view file)
FROM php:7.1-fpm-alpine
WORKDIR /var/www
EXPOSE 9000
CMD ["php-fpm"]
请求出现错误
const response = await axios.get('http://php-fpm:9000');
如何重现
- Create a swarm manager (and a worker) node
- 找出您的 Swarm 管理器 Node 的 IP 地址(通常是
192.168.99.100
):docker-machine ip manager
或docker-machine ls
。通过添加sudo vi /private/etc/hosts
编辑主机文件(在 Mac 上为192.168.99.100 project.dev
)和192.168.99.100 api.project.dev
-
git clone https://github.com/thomastilkema/docker-nginx-php-fpm-node project
-
cd project ./scripts/up.sh
- 查看容器的日志:
docker logs <container-id> -f
最佳答案
ECONNRESET
是另一端关闭连接,这通常可归因于协议(protocol)错误。
FastCGI 进程管理器 (FPM) 使用 FastCGI传输数据的协议(protocol)。
通过 nginx 容器,它将 HTTP 请求转换为 FastCGI
axios.get('http://nginx/whatever.php')
关于php - Docker:容器之间无法通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47340196/