Docker Compose Nginx链接容器

Docker Compose Nginx链接容器,docker,nginx,proxy,docker-compose,Docker,Nginx,Proxy,Docker Compose,我有一个运行Nginx的docker compose容器。托管的站点只是一个.test域,如example.test 此外,在容器中,Nginx运行位置代理并将其重定向到示例。test:8000。但它无法连接到该服务器,因为它实际上是从同一系统(所有桥接网络)上的不同容器托管的 如何让容器使用example.test域进行通信 或者,如果我无法让他们通过示例进行通信。测试,那么我如何链接他们,以便他们可以使用自己的docker compose服务名称,例如api或前端 Docker compos

我有一个运行Nginx的docker compose容器。托管的站点只是一个.test域,如
example.test

此外,在容器中,Nginx运行位置代理并将其重定向到
示例。test:8000
。但它无法连接到该服务器,因为它实际上是从同一系统(所有桥接网络)上的不同容器托管的

如何让容器使用
example.test
域进行通信

或者,如果我无法让他们通过
示例进行通信。测试
,那么我如何链接他们,以便他们可以使用自己的docker compose服务名称,例如
api
前端

Docker compose:

version: '3'

services:
    db:
        image: postgres
        ports:
         - "5432:5432"
    django:
        build: ./api
        command: ["./docker_up.sh"]
        restart: always
        volumes:
          - ./api:/app/api
          - api-static:/app/api/staticfiles
        ports:
          - "8000:8000"
        depends_on:
          - db
        environment:
          - MODE=DEV

volumes:
  frontend-build:
  api-static:
  certificates:
第二个合成文件(一起运行):

使用这些当前设置,运行时会出现错误

错误:对于92b89f848637_opensrd_hosting_1,无法启动服务托管:无法链接到/opensrd_django_1,因为它不属于默认网络

编辑:修改的docker-compose.prod.yml:

networks:
    app_net:
        driver: bridge
        ipam:
            driver: default
            config:
              -
                subnet: 172.16.238.0/24

services:
    django:
        environment:
          - MODE=PROD
        networks:
            app_net:
            ipv4_address: 172.16.238.10    
version: '3.5'

services:
    django:
        environment:
          - MODE=PROD
    hosting:
        build: ./hosting
        restart: always
        volumes:
           - frontend-build:/var/www
        ports:
          - "80:80"
          - "443:443"
        environment:
          - MODE=PROD

volumes:
    frontend-build:
但这给了我一个错误

错误:合成文件“/docker Compose.prod.yml”无效,因为:

networks.app_净值不允许有其他属性('config'意外)

networks.app_net.ipam包含无效类型,它应该是一个对象


您可以使用
外部链接
()或尝试将所有容器放在同一个虚拟网络上。

据我所知,您只是希望它们(django和nginx)跨组件链接

然后本机解决方案将是使用外部链接 然后像这样使用它:

services:
    [...]
    hosting:
        [...]
        external_links:
          - django_1:example
        [...]
其中,
django_1
代表由您提供的compose创建的容器名称,
example
是容器在django容器内可见的别名

反过来您可以只指向一个示例。通过编辑您的
/etc/hosts
(前提是您在linux/mac上工作)将域测试到特定地址 例如,添加一条记录,如

172.16.238.10   example.test
上面的地址将指向您的django应用程序(容器)

通过使用compose(
extra_hosts
)中的本机解决方案,可以在不改变您的
/etc/hosts
的情况下实现上述功能

此外,如果您更喜欢django/nginx容器的静态ip地址,以防您坚持使用
/etc/hosts
od
extra_hosts
解决方案,那么您可以使用compose提供的另一个本机解决方案,为所选服务设置静态ip,如

链接文档中的调整列表:

services:
  [...]
  django:
    [...]
    networks:
      app_net:
        ipv4_address: 172.16.238.10

networks:
  app_net:
    driver: bridge
    ipam:
      driver: default
      config:
      -
        subnet: 172.16.238.0/24

所以我尝试了@trust512和@DimaL给出的选项,但这些都不起作用

但是,在从我的compose文件中删除网络和链接,并删除现有的默认网络和构建的容器之后,它起了作用,并且我无法在使用
db
django
托管的容器之间进行引用

唯一不同的是我将composer版本从3改为3.5

以下是所有感兴趣的人的最终文件:

version: '3.5'

services:
    db:
        image: postgres
        ports:
         - "5432:5432"
    django:
        build: ./api
        command: ["./docker_up.sh"]
        restart: always
        volumes:
          - ./api:/app/api
          - api-static:/app/api/staticfiles
        ports:
          - "8000:8000"
        depends_on:
          - db
        environment:
          - MODE=DEV

volumes:
  frontend-build:
  api-static:
docker-compose.prod.yml:

networks:
    app_net:
        driver: bridge
        ipam:
            driver: default
            config:
              -
                subnet: 172.16.238.0/24

services:
    django:
        environment:
          - MODE=PROD
        networks:
            app_net:
            ipv4_address: 172.16.238.10    
version: '3.5'

services:
    django:
        environment:
          - MODE=PROD
    hosting:
        build: ./hosting
        restart: always
        volumes:
           - frontend-build:/var/www
        ports:
          - "80:80"
          - "443:443"
        environment:
          - MODE=PROD

volumes:
    frontend-build:

当我尝试外部链接时,我遇到了与之前相同的错误,
无法启动服务托管:无法链接到/opensrd\u django\u 1,因为它不属于默认网络
。至于网络,只要在子网范围内,我就可以随机指定自己的IP吗?