Docker 使用Symfony HttpClient的请求返回代码0,而使用postman的相同请求可以正常工作

Docker 使用Symfony HttpClient的请求返回代码0,而使用postman的相同请求可以正常工作,docker,symfony,httpclient,mercure,Docker,Symfony,Httpclient,Mercure,我有一个奇怪的问题,我向postman(我的mercure hub)发出的请求可以正常工作,但是使用Symfony HttpClient的发布者类(来自Symfony mercure bundle)将生成一个响应代码0。 根据我的研究,这意味着找不到URL,或者没有返回响应 我首先认为它可能与Publisher类本身有关,这就是为什么要打开它的原因,但经过一番尝试后,我认为我的容器可能存在通信错误?我试着给我的mercure容器“networks:internal”,其他一些容器也使用它,但这也

我有一个奇怪的问题,我向postman(我的mercure hub)发出的请求可以正常工作,但是使用Symfony HttpClient的发布者类(来自Symfony mercure bundle)将生成一个响应代码0。 根据我的研究,这意味着找不到URL,或者没有返回响应

我首先认为它可能与Publisher类本身有关,这就是为什么要打开它的原因,但经过一番尝试后,我认为我的容器可能存在通信错误?我试着给我的mercure容器“networks:internal”,其他一些容器也使用它,但这也没用

非常感谢你的任何意见

/e:我的码头工人:

version: "3"

services:
  traefik:
    image: traefik:v1.7
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./.docker/traefik/traefik.toml:/etc/traefik/traefik.toml
    networks:
      - proxy
    labels:
      - traefik.enable=true
      - traefik.docker.network=proxy
      - traefik.frontend.rule=Host:traefik.heracles.local
      - traefik.port=8080

  nginx:
    image: nginx:1.17-alpine
    volumes:
      - ./Source:/var/www
      - ./.docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    links:
      - php
    networks:
      - internal
      - proxy
    labels:
      - traefik.docker.network=proxy
      - traefik.enable=true
      - traefik.basic.frontend.rule=Host:heracles.local
      - traefik.basic.port=80

  php:
    build:
      args:
        USER_ID: ${USER_ID}
      context: ./.docker/php
    volumes:
      - ./Source:/var/www
      - ./.docker/php/conf/cli.ini:/etc/php/7.4/cli/conf.d/zz-symfony.ini
      - ./.docker/php/conf/fpm.ini:/etc/php/7.4/fpm/conf.d/zz-symfony.ini
      - ./.docker/php/conf/xdebug.ini:/etc/php/7.4/fpm/conf.d/zz-xdebug.ini
      - ./.docker/php/conf/opcache.ini:/etc/php/7.4/fpm/conf.d/zz-opcache.ini
      - ./.docker/php/conf/pool.conf:/etc/php/7.4/fpm/pool.d/www.conf
    networks:
      - internal
    labels:
      - traefik.enable=false

  db:
    image: mysql:5.7
    env_file:
      - .env
    volumes:
      - db_data:/var/lib/mysql
      - ./.docker/mysql/conf.d:/etc/mysql/conf.d
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --skip-character-set-client-handshake
    networks:
      - internal
    labels:
      - traefik.enable=false
    restart: always

  adminer:
    image: adminer
    networks:
      - internal
      - proxy
    labels:
      - traefik.docker.network=proxy
      - traefik.enable=true
      - traefik.basic.frontend.rule=Host:db.heracles.local
      - traefik.basic.port=8080

  blackfire:
    image: blackfire/blackfire
    networks:
      - internal
    labels:
      - traefik.enable=false

  mailhog:
    image: mailhog/mailhog
    networks:
      - internal
      - proxy
    labels:
      - traefik.docker.network=proxy
      - traefik.enable=true
      - traefik.basic.frontend.rule=Host:mail.heracles.local
      - traefik.basic.port=8025

  mercure:
    image: dunglas/mercure
    environment:
      - ALLOW_ANONYMOUS=1
      - CORS_ALLOWED_ORIGINS=*
      - JWT_KEY=ASD
      - PUBLISH_ALLOWED_ORIGINS=http://heracles.local
      - ADDR=:3000
    ports:
      - 3000:3000

networks:
  internal:
  proxy:
    external: true

volumes:
  db_data:

参考您的评论,您的
MERCURE\u PUBLISH\u URL
.env变量确实必须引用您的MERCURE容器,但不需要端口指示。如果Mercure容器的名称为“Mercure”,则环境变量应设置为:

MERCURE\u PUBLISH\u URL=http://mercure/.well-known/mercure


(如果您的连接安全,请将
http
替换为
https

好了,现在可以了。事实上,正确的url是 美居发布网址=
因此,如果您使用Docker容器,请确保通过正确的主机+端口,并将其他容器的网络交给mercure容器(在我的案例中是内部的)

如果你用的是docker compose,你能分享吗?@AliBenZarrouk我今晚回家后可以分享。一位同事刚刚告诉我,我可能必须将我的MERCURE_PUBLISH_URL=更改为merucre:3000/.well-known/…,因为我的MERCURE容器名为“MERCURE”。今晚我要试试!现在我收到错误“无法连接到服务器”。$httpClient=httpClient::create();$response=$httpClient->request('POST','',[“auth_bearer”=>“Eyjhbgcioijiuzi1niisinr5cci6ikpxvcjvc9.eyjtzxxjljlp7in1ymxpc2giolisahr0cdovl2hlcmfjbgvzlmxvy2fsil19fq.3DiIS7-ktvyqtvvvvvjvjvjjjvwmkbd8iwqpl--”,“body”>”主题=http%3A%2F%2F邮件。本地%2Flive%2Fchat%2Fget%2F1&数据=%7B%22新邮件%22%3A%22asdasd%22%2C%22作者%22%3A%22mehlichmeyer%22%7D“);@mehlichmeyer您是否尝试将
heracles.local:3000/.well-known/mercure
作为您的post请求url?因为在我与mercure合作的项目中,我没有在.env变量中提到端口,它工作正常(当我在模板中订阅hub时,我订阅
http://localhost:3000/.well-已知/美居
)。但可能是因为我使用的是Mercure捆绑包的发布者/更新实体。您有什么特别的理由改用HttpClient吗?我实际上也在使用发布者,但发布者本身对HttpClient有依赖性。我尝试使用了heracles.local/localhost,但它不起作用,您使用的是Docker容器吗还有吗?我昨天的评论是,我刚刚将HttpClient注入我的控制器进行了尝试,但是现在可以找到主机了,发布服务器工作正常,我正在使用它:)好的,太糟糕了,它不能与您的本地url一起工作。我也在使用Docker容器!我真的只需要为MERCURE_PUBLISH_url,w没有港口