繁体   English   中英

Docker:无法在容器之间进行通信

[英]Docker: can not communicate between containers

我有一个带有php-fpm容器,一个节点容器和一个用作代理的nginx容器的Docker设置。 现在,在浏览器中( http://project.dev ),php容器像我期望的那样以json响应。 都好。 但是,当我从节点容器向该php容器发出请求时( 查看代码 ),我收到了关于该请求的错误: ECONNRESET 因此,显然,节点容器无法与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

Nginx.conf的修整版(查看文件)

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(查看文件)

FROM php:7.1-fpm-alpine

WORKDIR /var/www

EXPOSE 9000

CMD ["php-fpm"]

出现错误的请求

const response = await axios.get('http://php-fpm:9000');

如何繁殖

  • 创建一个集群管理器(和一个工作器)节点
  • 找出您的swarm管理器节点的IP地址(通常为192.168.99.100 ): docker-machine ip managerdocker-machine ls 通过添加192.168.99.100 project.dev192.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

ECONNRESET是关闭连接的另一端,通常可以归因于协议错误。

FastCGI流程管理器(FPM)使用FastCGI协议来传输数据。

通过nginx容器,它将HTTP请求转换为FastCGI

axios.get('http://nginx/whatever.php')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM