gpt4 book ai didi

docker - Docker容器无法通过VIRTUAL_HOST环境变量访问另一个容器

转载 作者:行者123 更新时间:2023-12-02 18:29:24 25 4
gpt4 key购买 nike

我是Docker的新手,所以我不确定自己是否对所有事情都正确,但是我会尽力描述自己的情况。

我有两个单独的Docker容器,一个用于API,一个用于前端项目。我使用了jwilder/nginx-proxy,因此可以使用主机名(docker-compose上的VIRTUAL_HOST环境变量)访问它们。我可以在浏览器中打开前端项目,并可以使用postman访问我的API。

但是,当我尝试使用前端站点上的httpclient访问API端点时,它返回:
cURL error 6: Could not resolve host
我尝试过的

  • 使用networks连接容器。我可以确认它是否有效,因为当我对容器名称ping编码时,它将返回一个响应。
  • 在前端项目的extra_hosts中添加docker-compose。当我curl使用容器bash添加的主机时,我从API得到响应。

  • 但是,当我尝试打开站点时,错误仍然存​​在。我想念什么?

    这是我的项目的 docker-compose
    前端:
    version: "2"

    services:
    pixel_nginx:
    build: docker/nginx
    networks:
    default:
    aliases:
    - nginx
    depends_on:
    - pixel_phpfpm
    volumes:
    - ./docker/nginx/symfony.conf:/etc/nginx/conf.d/default.conf
    - ./:/www/
    environment:
    - VIRTUAL_HOST=pixel-project.local
    extra_hosts:
    - "auth-xx-dev.pixel.local:172.18.0.7"
    - "listing-xx-dev.pixel.local:172.18.0.7"

    pixel_phpfpm:
    build: docker/phpfpm
    volumes:
    - ~/.ssh/known_hosts:/root/.ssh/known_hosts
    - ~/.ssh/id_rsa:/root/.ssh/id_rsa
    - ./:/www/
    - ./data/pixel-project/tmp/:/tmp/
    networks:
    default:
    aliases:
    - php
    depends_on:
    - mysql
    environment:
    - ENV=development

    networks:
    default:
    external:
    name: pixelstack_pixel

    后端:
    version: "2"

    volumes:
    # this is the mysql data volume we are going to host the data inside
    dev_mysql_data:

    services:
    # database container for local development purposes
    dev_database:
    image: mysql:5.6
    networks:
    default:
    aliases:
    - database
    ports:
    - 3400:3306
    volumes:
    # mount the mysql_data docker volume to host the local development database
    - dev_mysql_data:/var/lib/mysql
    # the provision file helps when trying to use the provision script to clone databases
    - ./provision.cnf:/provision.cnf
    environment:
    MYSQL_ROOT_PASSWORD: pixel

    # This is the local development version of the nginx container
    dev_nginx:
    image: api-nginx:latest
    build: ./nginx
    networks:
    default:
    aliases:
    - nginx
    depends_on:
    - dev_phpfpm
    volumes_from:
    - dev_phpfpm
    environment:
    - VIRTUAL_HOST=~^(api|location|feedback|user|phone|loancalculator|seo|media|listing|development|kpi|newsletter|auth|worker|search)-xx-dev.pixel.local

    # This is the local development version of the phpfpm container
    dev_phpfpm:
    image: api-phpfpm:latest
    build:
    context: ./
    args:
    # this build might fail, if so, run in a terminal: export SSH_KEY=$(cat ~/.ssh/id_rsa)
    - SSH_KEY=$SSH_KEY
    networks:
    default:
    aliases:
    - phpfpm
    depends_on:
    - dev_database
    volumes:
    # we override the images /www directory with the code from the live machine
    - ./:/www
    env_file:
    # inside this file, are the shared database secrets such as username/password
    - ./env/common
    - ./env/dev

    networks:
    default:
    external:
    name: pixelstack_pixel

    编辑:
    我正在使用Ubuntu,并且在/ etc / hosts上设置了主机名

    更新:

    当使用 staging托管的 AWS域时,前端项目将获得预期的响应数据。因此,我可以说这方面没有问题。

    最佳答案

    您的两个Nginx容器在同一网络上都具有网络别名nginx,这意味着对nginx的请求将在两者之间进行循环(AFAIK,这两种方法都不行)。

    您可能需要这样的前端:

    networks:
    default:
    aliases:
    - frontend-nginx

    像这样的后端
    networks:
    default:
    aliases:
    - backend-nginx

    然后从前端容器中 curl 到 backend-nginx,它应该到达后端容器。

    Tldr:您有重复的别名,并且这些 .local域也无法在容器中解析。

    关于docker - Docker容器无法通过VIRTUAL_HOST环境变量访问另一个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51762958/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com