【问题标题】:Docker: can not communicate between containersDocker:容器之间无法通信
【发布时间】:2018-04-30 14:43:27
【问题描述】:

我有一个带有 php-fpm 容器、一个节点容器和一个用作代理的 nginx 容器的 Docker 设置。现在在浏览器 (http://project.dev) 中,php 容器像我期望的那样以 json 响应。都好。但是,当我从节点容器向这个 php 容器 (view code) 发出请求时,我收到请求错误: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 (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 manager节点的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

【问题讨论】:

    标签: php node.js docker nginx proxy


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢马特,这确实解决了我的问题。我现在得到了预期的响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2020-06-24
    • 2021-05-03
    相关资源
    最近更新 更多