当前位置: 首页 > 知识库问答 >
问题:

如何在网桥网络上获取集装箱ip

钮巴英
2023-03-14

我正在部署这样的mariadb集群。

(host) $ cat docker-compose.yaml
version:        '3.6'
services:
  parent:
    image:      erkules/galera
    command:    ["--wsrep-cluster-name=local-test", "--wsrep-cluster-address=gcomm://"]
    hostname:   parent
  child:
    image:      erkules/galera
    command:    ["--wsrep-cluster-name=local-test", "--wsrep-cluster-address=gcomm://parent"]
    depends_on:
      - parent
    deploy:
      replicas: 5
(host) $ sudo docker stack deploy --compose-file docker-compose.yaml mariadb

现在,我正在尝试在网桥网络中查找容器的IP,以便可以尝试从主机连接到db服务器。我能找到像这样的,

(host) $ docker exec $(docker ps -q | head -n 1) /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
176: eth0@if177: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:00:01:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.1.7/24 brd 10.0.1.255 scope global eth0
       valid_lft forever preferred_lft forever
182: eth1@if183: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:13:00:08 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 172.19.0.8/16 brd 172.19.255.255 scope global eth1
       valid_lft forever preferred_lft forever
(host) $ mysql -h 172.19.0.8 -u root
Welcome to the MariaDB monitor. ...

但是我必须做一些肮脏的分析。所以我想知道是否有一个优雅的方法来获得这只使用docker提供的命令。例如,对于覆盖网络中的ips,我们可以使用检查命令来获得json输出。

(host) $ docker ps -q | xargs docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Id }}' 
10.0.1.7 c8e3dfc13c60c6925e55dff1c8dad5fb8e9bbb2335743671e45cd2f4d47fabab
10.0.1.8 7fbede8ffa63e007544c28efcc2ec2418ad44b2012e849489c25536a8408e9f6
10.0.1.6 fe0b7dcdd26fa3edecc025a5b6be0bfab04bce4d448587e5488e414dba595758
10.0.1.10 2fe03472255577db0b2d54f40422be15915121fedf3873d9e09082d5caad7f2f
10.0.1.9 0b34241582be3218d022cc58c95ce21a8be0c46dcd2ff7bca64a02a11427953a
10.0.1.4 5acc231db33b494a83010f0d6397b11365d14ca264f52bc477c642a9eda0be3f

编辑1:我想保持部署部分尽可能一般。我不想发布端口。然后我必须为每个容器分配不同的端口。

Edit2:显然,对于多主机swarm覆盖网络,Docker使用Docker\u gwbridge接口。所以我可以做docker-network-inspect-docker\u-gwbridge来获取每个容器的IP。

共有2个答案

廉实
2023-03-14

此命令显示网络详细信息,包含加入网络及其IP的列表容器。希望这能有所帮助

docker network ls // To get list network running -> get network id
docker network inspect network_id // Now you can get container IP
寇升
2023-03-14

通常,当我们使用compose时,docker-compose.yml容器id的顺序为take.2。3.等

因此,请尝试创建一个网络(docker create network…),并将其放在docker-compose.yml por示例的最后:

rabbitmq:
ports:
   - "8201:8080"
volumes:
   - /share:/share
container_name: rabbitmq-int1
hostname: rabbitmq-int1
cpu_shares: 10
mem_limit: 2000000000
networks:
   compose_net:
         ipv4_address: 172.12.0.3
networks:
  compose_net:
     external:
        name: network_compose

其中network_compose是以前在主机/服务器中创建的网络(docker创建网络...)

 类似资料:
  • 本文向大家介绍Docker主机网络与网桥网络,包括了Docker主机网络与网桥网络的使用技巧和注意事项,需要的朋友参考一下 可用于Docker网络的单主机网络有两种类型:“主机”和“桥”网络。单主机网络意味着它们的影响对于每个单独的主机都是局部的。 在主机网络的情况下,特定的Docker容器可以直接使用主机的网络来发送和接收数据包。对于网桥网络,它需要端口映射才能进行通信。 为了更好地理解它们,让

  • 本文向大家介绍Docker网络上的用户定义网桥,包括了Docker网络上的用户定义网桥的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论为什么应该在默认桥网络上使用用户定义的桥网络。我们还将使用实际示例进行演示。 如果您使用用户定义的网桥进行容器网络连接,则该网络中的所有容器会自动将所有必需的端口公开给彼此,而不是公开给外部世界。这增加了容器之间的互操作性,并提供了更好的隔离性。 使用

  • null sbin/start-slave.sh spark://c96___37fb:7077--用于并置从机的端口7078 sbin/start-slave.sh spark://masternodeip:7077--其他两个从机的端口7078 前面引用的所有端口都从nodeMaster重定向到相应的Docker。 因此,webUI向我显示,我的集群有3个连接的节点,不幸的是,当运行时,只有并

  • 我有一个10.101的服务器VLAN。10.0/24,我的Docker主机是10.101。10.31. 如何在Docker主机(VM)上配置网桥网络,以便所有容器都可以直接连接到LAN网络,而无需在默认的172.17上重定向端口。0.0/16? 我尝试过搜索,但到目前为止我找到的所有howto都导致SSH会话丢失,我不得不从控制台进入VM以恢复我执行的步骤。

  • 问题内容: 我试图设置一个nginx-proxy容器来通过端口80而不是特殊端口上的子域访问我的其他容器。如您所料,我无法正常工作。 我对Docker本身是新手,发现对我来说编写文件更舒服,因此我不必不断地编写长命令。我认为使用或启动容器的方式没有区别。但是,我注意到的一个区别是,使用容器启动不会创建任何新的网络,但是之后将创建一个网络。 我读到不同网络上的容器无法相互访问,这可能是nginx-p

  • 有没有办法解决这个问题? 操作系统:Debian 8 Docker版本:1.9.0,构建76d6bc9 ifconfig输出: