标签: docker-networking

Docker:无法打开从容器到主机的端口

我正在使用Docker for Mac.我有一个运行服务器的容器,例如我的服务器在端口5000上运行.我已经暴露了这个端口Dockerfile

当我的容器运行时,我连接到这个容器并通过运行以下命令检查此服务器是否正常工作,并看到它返回数据(一堆html和javascript)

wget -d localhost:5000
Run Code Online (Sandbox Code Playgroud)

注意,我启动此容器并通过命令在外部发布端口:

docker run -d -p 5000:5000 <docker_image_name>
Run Code Online (Sandbox Code Playgroud)

但是在docker主机(是我的mac并运行El Capitan),我打开chrome并转到地址localhost:5000.它不起作用.只是一点注意,如果我去任何任意端口,例如localhost:4000我看到来自chrome的错误消息,例如:

This site can’t be reached
localhost refused to connect.
Run Code Online (Sandbox Code Playgroud)

但错误信息localhost:5000是:

The localhost page isn’t working
localhost didn’t send any data.
Run Code Online (Sandbox Code Playgroud)

所以我似乎已经将工作配置为"一点点",但有些不对劲.请告诉我如何解决这个问题.

docker dockerfile docker-networking

5
推荐指数
1
解决办法
1280
查看次数

从远程计算机连接到容器

我创建了一个用户定义的网络(桥接模式)hb1,并添加了2个容器。但是,我无法从网络上的外部主机连接到它们。

我仔细检查并按照此处此处的说明进行操作。

pi@raspberrypi:~ $ docker network inspect hb1
[
    {
        "Name": "hb1",
        "Id": "278a4ba8bb7a4a34b25b5f5fde9a965a807ff896d5e57c2b1d7d39af60d0a046",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.1.32/27",
                    "Gateway": "192.168.1.33"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "7dc7be3ae45813450bb7f75a6e2c7b4d93e59aa147aa7d393061748b8201381a": {
                "Name": "modest_bohr",
                "EndpointID": "eda20bbb52319b10911f3da6f6afadbd2167298d5a9cfd5c91f933f4b6d5fe86",
                "MacAddress": "02:42:c0:a8:01:22",
                "IPv4Address": "192.168.1.34/27",
                "IPv6Address": ""
            },
            "f12fbc30bcf5e37737bfe8c7868dcd40e6c632bb3672f5641ffd6960ede4f777": {
                "Name": "infallible_torvalds",
                "EndpointID": "92d0ecfad597485c25ad309d48c3c77b9368f25ebbd851b1168f59a795c497f2",
                "MacAddress": "02:42:c0:a8:01:23",
                "IPv4Address": "192.168.1.35/27",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
Run Code Online (Sandbox Code Playgroud)

当我从docker主机ping时,它按预期工作。

user@myhost: ~$ …
Run Code Online (Sandbox Code Playgroud)

docker docker-networking

5
推荐指数
1
解决办法
4232
查看次数

create_network():无法分配网关(xxxx):测试用例中已使用的地址

我尝试运行我的test_container_services.py套件,但遇到了这个问题:

docker.errors.APIError:500服务器错误:内部服务器错误("b'{"message":"无法分配网关(10.49.0.201):地址已在使用"}'")

我试图删除所有正在运行的容器和相关网络,但仍然遇到了问题.

信封

核心

$ uname
Linux x1 4.8.0-36-generic #36~16.04.1-Ubuntu SMP Sun Feb 5 09:39:57 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

搬运工人

$ docker --version 
Docker version 1.13.1, build 092cba3
Run Code Online (Sandbox Code Playgroud)

SDK

docker-py==1.10.6
Run Code Online (Sandbox Code Playgroud)

Docker环境

在运行测试之前,我处于这种状态:

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
a4beb5d4de56        bridge              bridge              local
8a1012b67f1a        host                host                local
ed2452ee5e44        none                null                local
Run Code Online (Sandbox Code Playgroud)

没有集装箱运行$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

测试

def test_get_network_config(self):
    number_networks = len(self.docker_api.networks())
    network_config = container_services.get_network_config(
        data={ …
Run Code Online (Sandbox Code Playgroud)

tdd docker dockerpy docker-networking

5
推荐指数
0
解决办法
2719
查看次数

无法在撰写中使用服务名称从(fluentd)日志驱动程序登录

我在 docker 中有以下设置:

  • 应用程序 (httpd)
  • 流利的
  • 弹性搜索
  • 基巴纳

应用程序的 logdriver 的配置描述了 fluentd 容器。日志将保存在 ES 中并显示在 Kibana 中。

当 logdriver 配置为这样时,它可以工作:

web:
    image: httpd
    container_name: httpd
    ports:
      - "80:80"
    links:
      - fluentd
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: httpd.access
Run Code Online (Sandbox Code Playgroud)

fluentd 将其暴露的端口 24224 映射到主机的端口 24224 上。

 fluentd:
    build: ./fluentd
    image: fluentd
    container_name: fluentd
    links:
      - "elasticsearch"
    ports:
      - "24224:24224"
Run Code Online (Sandbox Code Playgroud)

但我不想在主机网络上暴露我的流利。我想让它在 docker 网络中保持“私有”(我只想在主机网络上映射应用程序和 kibana),如下所示:

 fluentd:
   build: ./fluentd
   image: fluentd
   container_name: fluentd
   links:
     - "elasticsearch"
Run Code Online (Sandbox Code Playgroud)

端口 24224 仍然公开(在 dockerfile 中),但它没有映射到主机网络上。现在我想更改我的应用程序的日志驱动程序的配置: logging: driver: "fluentd" …

fluentd docker docker-networking efk

5
推荐指数
1
解决办法
2162
查看次数

集群闲置了一段时间后到达Docker容器的高延迟

我们已经成功创建了一个包含多个容器的Docker集群,可以说,总体而言,它工作正常。我们仍在开发产品的第一个版本,因此在产品环境中尚未部署任何产品。到目前为止,我们的配置非常简单(docker-compose.yml):一个网络,一个卷,6个服务,每个服务1个副本(打算在将来有更多副本),所有服务都是rest服务,只有1个节点(带有将来有更多节点的意图)。

我们注意到的唯一奇怪的事情是,让我们担心的是,在集群闲置了一段时间(例如,开发服务器上的任何容器上都没有传入请求)之后,我们在到达任何其他服务时都会经历高延迟仅在每次服务的第一个请求期间发生。因此,例如:

群:服务A,服务B

空闲30分钟->在30分钟内没有任何服务的传入请求

对服务A的传入请求(不可缓存请求)->(大约)20秒后响应

服务A的传入请求(不可缓存请求)->立即响应

...对服务A的进一步打击立即响应

到服务B的传入请求(不可缓存请求)->(大约)20秒后响应

服务B的传入请求(不可缓存请求)->立即响应

...对服务B的进一步打击会立即做出回应

我们进入了容器(执行bash),并注意到:

  1. Ping到其他容器IP会立即响应
  2. ping到其他容器名称(dns)具有提到的延迟(高延迟)
  3. 容器名称(dns)解析会立即发生(因此它不是dns级别的延迟)

更多细节:

  • 主机操作系统:Ubuntu 16.04
  • Docker版本:17.06.0-ce

有人对这里可能发生的事情有任何想法吗?

docker docker-compose docker-swarm docker-networking docker-swarm-mode

5
推荐指数
0
解决办法
450
查看次数

如果 docker 网络不存在,Testcontainers 可以为我创建它吗?

看起来我需要一个网络,因为我想通过主机名从另一个容器引用一个容器。

我也可以使用--link但它已被弃用并且很快就会消失。这就是为什么我想知道 Testcontainers 是否可以为我创建一个 docker 网络。

使用命令行,我只需执行docker network create bridge2,然后我就可以像这样启动容器:

docker run -it --rm --net=bridge2 --name alpine1 alpine
docker run -it --rm --net=bridge2 --name alpine2 alpine
Run Code Online (Sandbox Code Playgroud)

nslookup alpine2alpine1容器中解析。

如果我尝试使用默认--net=bridge网络或跳过--net选项(实际上是相同的),则按名称引用将不起作用。

docker docker-networking docker-network testcontainers

5
推荐指数
1
解决办法
3332
查看次数

从Docker容器中获取主机的Mac地址

在我的Docker化应用程序中,我需要具有硬件锚点并考虑使用Container的Mac地址。但是:由于Docker容器的Mac地址是可变的,并且在容器启动时动态分配,因此我无法使用此Mac地址(请参阅Docker文档

MAC地址是使用分配给容器的IP地址生成的,以避免ARP冲突,其使用范围是02:42:ac:11:00:00到02:42:ac:11:ff:ff

Docker主机的Mac地址将是一个可行的解决方案。

如何从在此主机上运行的容器内访问(linux)主机的Mac地址?

linux docker docker-networking

5
推荐指数
1
解决办法
1453
查看次数

docker ee windows server 2016 无法创建网络

我是 Docker 新手,我正在尝试使用驱动程序桥创建网络

docker network create -d bridge DockerNet
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误消息:来自守护进程的错误响应:找不到插件。

我也尝试使用

docker network create -d l2bridge DockerNet
Run Code Online (Sandbox Code Playgroud)

因为 docker info 中显示的插件名为l2bridge.

码头工人信息:

 Containers: 4
 Running: 0
 Paused: 0
 Stopped: 4
 Images: 2
 Server Version: 17.06.2-ee-14
 Storage Driver: windowsfilter
  Windows:
 Logging Driver: json-file
 Plugins:
  Volume: local
  Network: l2bridge l2tunnel nat null overlay transparent
  Log: awslogs etwlogs fluentd json-file logentries splunk syslog
 Swarm: inactive
 Default Isolation: process
 Kernel Version: 10.0 14393 (14393.2248.amd64fre.rs1_release.180427-1804)
 Operating System: Windows Server 2016 Standard
 OSType: windows …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-networking windows-server-2016

5
推荐指数
1
解决办法
1280
查看次数

使用Docker容器作为网络网关

我想配置一个网关来连接两个容器。下面是一个示例撰写文件,该文件创建了三个容器-一个test_client,一个test_server和一个代理。代理服务器应充当从test_client到test_server的所有通信的默认网关。我正在使用撰写文件格式v2,因为v3不支持IPAM网关配置。

version: "2"
services:
  proxy:
    build: .
    cap_add:
      - NET_ADMIN
    expose:
      - 8080
      - 80
      - 443
    networks:
      client_network:
          ipv4_address: '192.168.0.5'
      server_network: null
    stdin_open: true
    tty: true
  test_server:
    build: ./test_server
    expose:
      - 8000
    networks:
      - server_network
  test_client:
    build: ./test_client
    networks:
      - client_network
    stdin_open: true
    tty: true

networks:
  client_network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: "192.168.0.0/24"
          gateway: "192.168.0.5"
  server_network:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

运行时docker-compose up,出现以下错误:

ERROR: for 28e458cec9ac_network_proxy_1  b'user specified IP address is supported only when connecting to networks …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-networking

5
推荐指数
1
解决办法
1214
查看次数

Vagrant + Docker提供商,在静态IP方面苦苦挣扎

我正在努力为Docker提供商提供静态IP分配.

config.vm.define "dockeragent" do |dockeragent|
    dockeragent.vm.provider "docker" do |d|
        d.build_dir = "../installers/docker/"
    end
    dockeragent.vm.network :private_network, ip: "172.16.1.3"
end
Run Code Online (Sandbox Code Playgroud)

我希望我的容器名为dockeragentuses,172.16.1.3但它总是使用172.16.1.1,我的问题是我想要多个容器,每个容器必须有自己的IP.

networking vagrant docker docker-networking

5
推荐指数
0
解决办法
91
查看次数