Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 在docker compose中使用主机网络和其他网络_Networking_Docker_Vagrant_Docker Compose_Devops - Fatal编程技术网

Networking 在docker compose中使用主机网络和其他网络

Networking 在docker compose中使用主机网络和其他网络,networking,docker,vagrant,docker-compose,devops,Networking,Docker,Vagrant,Docker Compose,Devops,我正在尝试为我的项目设置一个开发环境 我有一个容器(ms1),应该放在他自己的网络中(在我的例子中是“服务”),还有一个容器(apigateway),它应该在向主机网络公开http端口的同时访问该网络 理想情况下,我的docker compose文件如下所示: version: '2' services: ms1: expose: - "13010" networks: services:

我正在尝试为我的项目设置一个开发环境

我有一个容器(ms1),应该放在他自己的网络中(在我的例子中是“服务”),还有一个容器(apigateway),它应该在向主机网络公开http端口的同时访问该网络

理想情况下,我的docker compose文件如下所示:

version: '2'
services:
    ms1:
        expose:
            - "13010"
        networks:
            services:
                aliases:
                    - ms1
   apigateway:
        networks:
            services:
                aliases:
                    - api
        network_mode: "host"
networks:
    services:
docker compose不允许同时使用网络模式和网络

我还有其他选择吗

目前我正在使用这个:

   apigateway:
        networks:
            services:
                aliases:
                    - api
        ports:
            - "127.0.0.1:10000:13010"
然后apigateway容器侦听0.0.0.0:13010。它可以工作,但速度很慢,如果主机的internet连接中断,它就会冻结

另外,我计划将来在docker上使用vagrant,它是否允许以干净的方式解决问题?

我会尝试以下方法:

1/查找主机网络
docker网络ls

2/使用此dockercompose文件

     services:
          ms1:
              ports:
                  - "13010"
              networks:
                  - service
          apigateway:
              networks:
                  - front
                  - service

      networks:
          front:
          service:
              external:
                  name: "<ID of the network>"
服务:
ms1:
端口:
- "13010"
网络:
-服务
apigateway:
网络:
-正面
-服务
网络:
正面:
服务:
外部:
姓名:“

在docker 1.13中,您应该能够创建一个服务来连接两个网络。我正在使用类似于fix的东西,我认为这也有助于:

docker service create \
--name proxy \
--network proxy \
--publish mode=host,target=80,published=80 \
--publish mode=host,target=443,published=443 \
--constraint 'node.hostname == myproxynode' \
--replicas 1 \
letsnginx

在docker compose中公开
。由于您可能不再需要服务链接(相反,您应该像以前一样依赖Docker networks),因此该选项通常价值有限,在您的场景中似乎对您没有任何价值

我怀疑您是误用了它,在意识到它本身似乎没有任何效果后,偶然发现使用主机网络驱动程序将“使其工作”。请注意,这与
expose
属性无关。只是主机网络驱动程序允许包含的进程直接绑定到主机网络接口。由于这一点,您可以从外部访问API网关进程。您可以删除
expose
属性,它仍然可以工作

如果这是您选择主机网络驱动程序的唯一原因,则您已成为以下问题的受害者:

(tl;dr)
在正常情况下,您不需要使用主机网络驱动程序,默认网桥网络驱动程序工作正常。您要查找的是属性,而不是
expose
。这将在后台设置适当的端口转发。

您可以使用apigateway的ms1 IP地址吗?看看如何使用docker 1.10.1实现这一点,我也在尝试同样的方法,但解决了一个不同的问题(可能)。在我的例子中,我创建了一个在两个服务之间共享的网络,但由于某种原因,其中一个服务没有连接到internet(我认为原因是它不是主机网络的一部分)。但是,问题是它无法解析URL,因为无法访问DNS。我使用IP地址做了一个快速修复,但会仔细检查,以将请求转发到正确的DNS。当我尝试使用上面的命令创建主机网络时,我从守护进程得到此错误
错误响应:只允许“主机”网络的一个实例
,因此您可以使用已经存在的实例。我更新了我的答案,但我没有能力测试它。