zoukankan      html  css  js  c++  java
  • [Docker]

    部署了两个独立的容器:

    Container #1 - Web Client
    Container #2 - SQL Server

    不同容器间如何互访?

    无法从 Container #1 访问到 Container #2,ping 不通。 

    检查网络状态

    安装 Docker 时,会自动创建 3 个网络。

    docker network ls 命令可以列出这些网络。

    bridge 网络:表示所有 Docker 安装中都存在的 docker0 网络。除非使用 docker run --net=<NETWORK>选项另行指定,否则 Docker 守护进程默认情况下会将容器连接到此网络。在主机上使用 ifconfig命令,可以看到此网桥是主机的网络堆栈的一部分。
    none 网络:在一个特定于容器的网络堆栈上添加了一个容器。该容器缺少网络接口。
    host 网络:在主机网络堆栈上添加一个容器。您可以发现,容器中的网络配置与主机相同。

    docker network inspect 命令用于显示一个或多个网络的详细信息。

    它返回有关一个或多个网络的信息。 默认情况下,此命令将所有结果呈现在JSON对象中。

    docker network ls
    
    NETWORK ID          NAME              DRIVER 
    7fca4eb8c647        bridge            bridge 
    9f904ee27bf5        none              null 
    cf03ee007fb4        host              host

    docker network inspect bridge
    [ { "Name": "bridge", "Id": "b2c85e46cb4fad5603c1614d04e73f6fc07a27b0d4c6a026f03b28a50a6e869b", "Created": "2019-11-03T09:14:31.8501331Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "0d5338cf858f58e6dcffa489229d1b2f2b35cdc6ce3076bd2eccba305186dce9": { "Name": "exciting_perlman", "EndpointID": "48aca2d7558edf69d1e6bfbcb6c47f4f3446d64e278600ffaf8a9b47cf7e60c2", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" }, "Labels": {} } ]

    Issue 原因

    Container #1 包含在 bridge 网络中,而 Container #2 并没有被包含进来。

    解决方案

    重启容器,将 #2 接入 #1 同一网络(bridge)中即可。

    docker run --name mssql -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=yourStrong(!)Password" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-CTP3.2-ubuntu
    
    docker ps
    
    docker network connect bridge 4f91e220c912
    
    docker network inspect bridge
    [
        {
            ......"ConfigOnly": false,
            "Containers": {
                "0d5338cf858f58e6dcffa489229d1b2f2b35cdc6ce3076bd2eccba305186dce9": {
                    "Name": "exciting_perlman",
                    "EndpointID": "48aca2d7558edf69d1e6bfbcb6c47f4f3446d64e278600ffaf8a9b47cf7e60c2",
                    "MacAddress": "02:42:ac:11:00:03",
                    "IPv4Address": "172.17.0.3/16",
                    "IPv6Address": ""
                },
                "4f91e220c9126a443143d7e98f2bc8afdbd82211402c581a6a411c197a77ea25": {
                    "Name": "mssql",
                    "EndpointID": "050fc8a64e774480e8728292d14778ba86beea433e37ca28cd03414de000f739",
                    "MacAddress": "02:42:ac:11:00:02",
                    "IPv4Address": "172.17.0.2/16",
                    "IPv6Address": ""
                }
            },
            ......
        }
    ]

    在 Docker 的 Ubuntu 镜像中如何使用 ifconfig 和 ping 命令?

    进入 Docker 容器

    docker exec -it 容器ID或容器名 bash

    安装 ifconfig 和 ping 工具包

    apt-get update
    apt-get install net-tools
    apt-get install iputils-ping

    Docker 常规操作命令?

    启动容器

    docker start 容器ID或容器名

    参数
    -i:以 交互模式启动
    -t:以 附加进程方式启动

    停止容器

    docker stop 容器ID或容器名

    参数
    -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态

    关闭容器

    docker kill 容器ID或容器名

    重启容器

    docker restart 容器ID或容器名

    参数
    -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态

    参考资料

    https://www.cnblogs.com/lihan829/p/11483594.html
    https://forums.docker.com/t/how-to-reach-a-container-from-another-container-without-ip-of-dockernat/21083/4
    https://www.ibm.com/developerworks/cn/linux/l-docker-network/index.html
    https://www.cnblogs.com/jsonhc/p/7823286.html
    https://www.yiibai.com/docker/network_connect.html
    https://blog.csdn.net/Michel4Liu/article/details/80889977

  • 相关阅读:
    icmp隧道手工操作
    Volatility2.4以上版本及fmem使用指南
    服务器解析漏洞总结
    Docker搭建独立服务器
    shell--(二)变量、字符串、数组、注释
    shell--(一)运行示例
    mysql 批量更新,没有就插入
    go 系统监控 cpu、内存等指标
    监控
    maven安装配置 每次都百度,麻烦
  • 原文地址:https://www.cnblogs.com/jinzesudawei/p/11790038.html
Copyright © 2011-2022 走看看