标签: docker-networking

部署服务时,如何解决Docker错误“ Win32中的hnsCall失败:找不到适配器”?

我正在尝试从主机运行一个四节点群集,我的计算机是管理器,并将三个Hyper-V VM作为工作程序节点。我试图在所有节点hnsCall failed in Win32: An adapter was not found上将静态网页作为服务运行,但是始终在主机和No such image虚拟机上接收错误(尝试从私有注册表中提取服务映像)。在部署堆栈或使用时会发生这种情况service create。但是,我可以通过容器实例运行静态页面,并且可以正常工作。

我按照本指南设置和创建了我的VM,我怀疑这是我的问题所在。我通过HyperV虚拟交换机管理器创建的虚拟交换机(名为thevswitch)既在外部,又在正确的适配器上设置。我初始化用我的主机的IPv4下一个群thevswitch--advertise-addr标志,并成功加入了虚拟机的工作节点到这个IP,同时使用驱动程序。无论如何,Docker似乎都看不到我创建的虚拟交换机。

PS C:\Docker\swarm-test> docker version
Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:31 2019
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.24)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun …
Run Code Online (Sandbox Code Playgroud)

docker docker-swarm docker-machine docker-networking docker-for-windows

8
推荐指数
1
解决办法
572
查看次数

如何通过IP使其他网络机器可以访问Docker容器?

我需要创建一些必须由同一网络上的其他计算机访问的docker容器.

问题是,当我创建容器时,Docker只能在主机内获得有效的IP地址.

我已经看过Docker文档(网络)但没有任何工作.

如果我ifconfig在我的机器上运行我的IP地址是172.21.46.149.当我进入容器(Ubuntu)并运行ifconfigIP地址时172.17.0.2.例如,我需要Docker来获取172.21.46.150.

我该怎么做?

docker docker-networking

7
推荐指数
1
解决办法
9736
查看次数

仅将docker swarm模式端口发布到localhost

我用swarm中的一个网站创建了docker swarm,在外面发布端口8080.我想使用在端口80上运行外部群集的Nginx来使用该端口,这将执行服务器名称解析和主机静态文件.

问题是,swarm使用iptables自动将端口8080发布到Internet,我不知道是否可以只允许本地nginx实例使用它?因为当前用户可以访问80和8080端口上的站点,而第二个端口被破坏(没有图像).

尝试玩ufw,但它不起作用.手动更改iptables也是一场噩梦,因为我必须在每次更新后在每个swarm节点上执行此操作.有解决方案吗

编辑:我不能使用相同的网络swarm和nginx swarm,因为覆盖网络与普通的单主机容器不兼容.从理论上讲,我可以将nginx放到swarm中,但我更喜欢将它保持在包含静态文件的同一主机上.

nginx docker docker-swarm docker-networking

7
推荐指数
2
解决办法
3412
查看次数

无法解析 docker 容器之间的主机名

我在单独的撰写文件中创建了两个容器(为应用程序隔离而完成——每个应用程序可能在撰写文件中定义了多个容器,例如后备数据库)。

这些容器通过名为“common”的外部网络链接。

一个示例撰写文件是:

version: '2'

services:

  rabbitmq:
    image: "rabbitmq:3-management"
    hostname: "rabbitmq"
    container_name: "rabbitmq"
    environment:
      RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
      RABBITMQ_DEFAULT_USER: "rabbitmq"
      RABBITMQ_DEFAULT_PASS: "rabbitmq"
      RABBITMQ_DEFAULT_VHOST: "/"
    ports:
      - "15672:15672"
      - "5672:5672"

networks:
  default:
    external:
      name: common
Run Code Online (Sandbox Code Playgroud)

Docker 版本:

root@server:~/# docker version
Client:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   23cf638
 Built:        Mon, 10 Oct 2016 21:38:17 +1300
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   23cf638
 Built:        Mon, 10 Oct 2016 21:38:17 +1300
 OS/Arch:      linux/amd64
root@server:~/# …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-networking

7
推荐指数
1
解决办法
2万
查看次数

如何从Windows中的Docker容器访问“ http:// localhost”?

我有一组在Windows 10中使用Docker运行的容器,这是输出docker-compose ps

> docker-compose ps
     Name                    Command               State                          Ports
--------------------------------------------------------------------------------------------------------------
db_mysql          docker-entrypoint.sh mysqld      Up      3306/tcp
elk               /usr/bin/supervisord -n -c ...   Up      0.0.0.0:81->80/tcp
php71-fpm-nginx   /config/bootstrap.sh             Up      443/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:9001->9001/tcp
Run Code Online (Sandbox Code Playgroud)

这是输出docker inspect

> docker inspect php71-fpm-nginx
[
    {
        ...
            "NetworkMode": "anotherlampdocker_default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "80"
                    }
                ],
                "9001/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "9001"
                    }
                ]
            },
        ...
        "Mounts": [
            {
                "Source": "/d/Development/www",
                "Destination": "/data/www",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }, …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-networking docker-container

7
推荐指数
1
解决办法
7332
查看次数

网络 docker 容器上的 HttpClient 请求

我是 docker 容器的新手,我遇到了以下问题。我正在开发一个向公开的 api 发出请求的网页。它们都发布在通过网络链接的不同容器上。这是我的 docker-compose.yml 文件:

version: '2'

services:
  api:
    image: my/api
    networks:
      - api
    ports:
      - "8080:5000"    
    container_name: api  

  web:
    build:
      context: ./DockerWeb      
    networks:
      - api      
    ports:
      - "80:5000"    
    container_name: web

networks:    
  api:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

我注意到,如果我附加到运行我的网页的容器,我可以使用 ping api 容器而不会出现任何问题 ping api

尝试对 api 容器进行任何 Web 服务调用时会出现问题。我正在尝试初始化一个 HttpClient 对象,但是必须将此类对象的 BaseAddress 属性设置为有效的 Uri。

_client = new HttpClient();
_client.BaseAddress = new Uri(config.ApiUrl); //config.ApiUrl = "api"
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误

UriFormatException:无效的 URI:无法确定 URI 的格式。

有没有办法 a) 以不同的方式公开容器名称,或者 b) 在不需要使用 URI 的情况下调用 Web 服务?我怎样才能做到这一点?

更新

我已更新 …

c# docker docker-networking asp.net-core-webapi

7
推荐指数
1
解决办法
6400
查看次数

Docker Compose配置中"ipam"键的用途是什么?

我是Docker的新手但不是那么新我不理解Docker的cli.但是我对Docker文件和Docker Compose的处理方式都很新.如果有人能向我解释docker-compose.yml的这一部分,我将非常感激.

我的评论是嵌入式的:

networks:
  vpcbr: <-I know what this is
    driver: bridge <-I know what this is
    ipam:  <-What the heck is this for?
     config: <-I know what this is.
       - subnet: 10.5.0.0/16 <- Obvious
         gateway: 10.5.0.1 <- Obvious
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-networking docker-network

7
推荐指数
1
解决办法
6195
查看次数

如何从连接到外部网络的另一个组合访问容器?

这是我希望从外部容器(在另一个撰写文件中定义)连接到的带有容器配置的撰写文件:

version: '3.5'
services:
  service-to-connect-to:
    build: .
    networks:
      - my-external-network

networks:
  my-external-network:
    external: true
Run Code Online (Sandbox Code Playgroud)

和另一个包含我希望连接到的容器配置的撰写文件service-to-connect-to

version: "3.5"

services:
  service-to-connect-from:
    build: .
Run Code Online (Sandbox Code Playgroud)

我试图service-to-connect-to通过这个域连接到:

service-to-connect-to service-to-connect-to.my-external-network my_external_network.service-to-connect-to

但他们都没有工作。

我错在哪里?

谢谢

docker docker-compose docker-networking docker-network

7
推荐指数
1
解决办法
4528
查看次数

如何使用 docker-compose v3 加入默认网桥和用户定义的网桥?

我有一个 docker-compose yml,其中有几个服务位于用户定义的网络中(在桥接模式下)。我想在默认 docker 网桥上连接我的服务,以便向外界公开一个端口。

总而言之,有一个我想要做的具体例子:

services:
  service1:
    networks:
      - my_network

  service2:
    networks:
      - my_network
      - bridge
    ports:
      8080:8080
Run Code Online (Sandbox Code Playgroud)

如此处所述我尝试了以下操作,但导致此错误:ERROR: for app network-scoped alias is supported only for containers in user defined networks

networks:
  my_network:
    driver: bridge
  bridge:
    external: true
Run Code Online (Sandbox Code Playgroud)

我还尝试了如何使用 docker-compose v2 加入默认网桥网络中提出的解决方案,但您不能在 docker compose 中混合使用关键字network_mode: bridge和关键字networks

我也尝试在docker-compose.yml中去掉对默认网桥网络的引用,并在启动服务后将我的service2容器添加到默认网桥中,例如:

docker-compose up
docker network connect bridge service2
Run Code Online (Sandbox Code Playgroud)

这种方法有效,我可以从外部访问我在service2上暴露的端口,我最终得到:

docker inspect service2


"Networks": {
    "bridge": {
        ...
     }, …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-networking

7
推荐指数
1
解决办法
4004
查看次数

如何在 docker compose 版本中启用 IPv6:&gt;= 3?

我需要为我的 docker 容器启用 IPv4/IPv6 双栈支持。我的 docker compose 文件是版本 3。默认情况下启用 IPv4,但如何为我的 docker 容器/网络启用 IPv6?

我已经尝试通过更新 daemon.json 来更新 docker 守护进程,我知道更新正在被识别,因为如果文件中有错误,Docker 将不会启动。进行更改后,我重新启动了 Docker(不仅仅是我的容器),但我的容器仍然没有 IPv6 地址。

我发现enable_ipv6: truedocker compose 文件对版本 3 或更高版本无效,我不想按文件版本降级。

我更新的 daemon.json:

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}
Run Code Online (Sandbox Code Playgroud)

当我检查我的容器时,在对 daemon.json 进行更改后,使用 docker inspect {id} 我看到以下内容:

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "df737362d15722fc1b0501ac256ba371417fe513dede807f2a17bd0524630a31",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "9000/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/df737362d157",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0, …
Run Code Online (Sandbox Code Playgroud)

ipv6 docker docker-compose docker-networking

7
推荐指数
1
解决办法
5140
查看次数