给docker配置指定ip

这篇具有很好参考价值的文章主要介绍了给docker配置指定ip。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要使用docker network进行ip的配置(本文主要使用一个容器来试验)

1、创建一个简单容器,并查看它的详细信息

        1.1 创建容器

docker指定ip,docker,容器,运维

        1.2 查看IP信息

docker指定ip,docker,容器,运维

2、查看docker 网络信息

        2.1 查看docker网络列表

docker指定ip,docker,容器,运维

        图中bridge是我这里docker的默认桥接网络,通过查看网络详细信息我们可以发现,我们的test容器使用的是bridge如下:

        [root@192 ~]# docker network inspect bridge 
[
    {
        "Name": "bridge",
        "Id": "40b01687a277bf4622dc67bd454eb1f9d6bbab6bf0c547843254c852b680661d",
        "Created": "2023-06-16T20:22:32.094125218+08:00",
        "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,
        "Containers": {
            "b015805631839406a7ef4ced2b2cd810dc6b7a08d26f02792858598eec436a46": {
                "Name": "test",
                "EndpointID": "d4ddc395b7185a61b0a4008f28286c74bf701493357225656a363bfe8f80e99c",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/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": {}
    }
]
 

        而我们尝试修改test的ip时,系统会指出“用户指定的IP地址仅在用户定义的网络上支持”,如下图:

docker指定ip,docker,容器,运维

         所以如果我们要指定容器的ip,我们就要使用自己定义的网络。(同时,当我们使用自己定义的网络但是没有分配指定ip的时候,ip的分配将由容器依照容器启动的顺序,在对应的网段内从2开始往后分配)。

        3、自定义容器网络

docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 test

        --driver        设置网络模式, bridge 为桥接模式(可以不写,默认为桥接)

        Docker有四种网络模式
        host:容器和主机共享一个网络。
        container:容器和另外一个容器共享一个网络。
        none:不进行网络连接。
        bridge:默认配置,桥接模式。

        --subnet 设置网段(可以不写,默认为当前所有网段中数值上最大的网段+1的网段,比如当前数值上最大的网段是172.20.0.0/16,则不写的话默认为172.21.0.0/16)

172.18.0.0/16         主机部分全0

        --getway 设置网关(可以不写,不写的话,就没有)

172.18.0.1                一般是主机部分的数值从1开始递增,有n个网关,按理就是172.18.0.2

                                 到172.18.0.n(n<256)

4、配置ip

docker指定ip,docker,容器,运维

         此时ip为空是因为当前容器还没有打开,只有当容器打开的时候,docker才会开始给容器分配ip,而当ip没有被定义的时候,一般ip默认是从2开始依次递增(一般网关主机部分的数值是1)。

ps:docker自动分配是基于当前网络中的ip的,而我们自定义ip是固定的,也就是说,如果你定义了172.18.0.2这个ip,而当有一个容器的ip是由docker自动分配的时候,此时如果自定义ip的容器没开启的话,docker分配的ip依旧是从172.18.0.2开始,而因为这两个ip相同,所以如果先开启docker自动分配ip的容器,我们自定义ip的容器在开启的时候就会发生ip冲突从而启动失败。

docker指定ip,docker,容器,运维

5、测试

        我们从起docker再打开test查看进行测试

docker指定ip,docker,容器,运维

        如此,我们就配好固定ip啦

6、常见问题

序号 报错 翻译 理由 解决方法
1 Error response from daemon: User specified IP address is supported on user defined networks only 来自守护进程的错误响应:用户指定的IP地址仅在用户定义的网络上支持 我们只能指定在我们自定义的网络上支持的IP 无,但是如果只是为了配置固定ip,可以自定义网络进行配置
2 Error response from daemon: Address already in use ip地址已在被使用

1、自定义的ip已被分配,可能是自动分配的时候分配掉的

2、在修改容器ip时,如果容器此时开着,并且修改的网段与当前网段一致,也会有可能出现这个问题

1、先开启自定义ip的容器

2、先关闭容器,并断开网段,否则修改可能会不起作用。

        6.1 ip无法被自定义

docker指定ip,docker,容器,运维

         6.2 ip冲突

docker指定ip,docker,容器,运维

        6.3 等等等系列问题……

                错误待开发文章来源地址https://www.toymoban.com/news/detail-686305.html

到了这里,关于给docker配置指定ip的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker网络配置固定容器ip

    如果不固定ip,每次启动时,docker会动态给容器分配ip,有些时候会造成影响。 1)创建自定义docker内部网络 docker network 官方文档 (看不懂可用浏览器翻译):https://docs.docker.com/engine/reference/commandline/network_create/ –subnet:指定网段的 CIDR 格式的子网 其中 172.172.0.0/16 表示子网范

    2024年02月15日
    浏览(35)
  • Docker 将jar包 打包成容器,并挂载jar包和指定yml配置

    1.在 Dockerfile 中指定基础镜像,如 openjdk:8-jdk-alpine。 2.在 Dockerfile 中创建一个工作目录,如 /app。 3.将 jar 包复制到工作目录中,可以使用 COPY 指令。 4.将 yml 配置文件复制到工作目录中,也可以使用 COPY 指令。 5.暴露 jar 包使用的端口,可以使用 EXPOSE 指令。 6.在 Dockerfile 中指

    2024年02月05日
    浏览(46)
  • [运维] iptables限制指定ip访问指定端口和只允许指定ip访问指定端口

    要使用 iptables 限制特定IP地址访问特定端口,您可以使用以下命令: 请将 IP地址 替换为要限制的IP地址,将 端口号 替换为要限制的端口号。 这个命令将添加一条规则到 iptables 的 INPUT 链,该规则匹配特定的 IP 地址和端口号,并将数据包的动作设置为 DROP ,这意味着数据包将

    2024年02月12日
    浏览(34)
  • Docker网络配置与自定义IP容器通信

    目录 前言 一、docker网络配置 1. bridge 虚拟网桥 2. host 网络模式 3. none 网络模式 4. 自定义container网络模式 二、自定义IP容器通信 1. 自定义IP 2. 创建所需容器(mysql,tomcat) 3. 准备项目资源 4. 构建Nginx实现负载均衡          当项目大规模使用 Docker 时,容器通信的问题也就

    2024年01月25日
    浏览(46)
  • [运维|docker] docker 清理指定存储

    要清理Docker中的指定存储,你可以执行以下步骤: 确定要清理的存储类型。Docker有以下几种存储类型: 容器卷(Container Volumes) 匿名卷(Anonymous Volumes) 本地卷(Local Volumes) 数据卷容器(Data Volume Containers) 使用以下命令查看相应类型的存储列表: 容器卷: 匿名卷: 本地

    2024年02月15日
    浏览(82)
  • Docker 创建容器并指定时区

    要在 Docker 容器中指定时区,可以通过两种方式来实现: 在 Docker 运行时,可以通过 -e 或 --env 选项来设置环境变量。可以设置一个名为 TZ 的环境变量,并将其值设置为所需的时区。 例如,要将容器的时区设置为东八区(北京时间),可以使用以下命令: 这将使容器在启动时

    2024年04月11日
    浏览(31)
  • 第七次作业 运维高级 docker容器进级版

    1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 (1)拉取相应镜像 (2)运行mysql:5.6容器 (3)运行owncloud容器 (4)查看并验证 之后在浏览器中输入ipaddress:8080 2、安装搭建私有仓库 Harbor (1)下载好harbor和docker-compose (2)上传到Linux服务器 (3)复制docker-compose并修改权限 (4)解压harbor (

    2024年02月12日
    浏览(54)
  • docker 查询指定名字的容器id

    1.要查询指定名字的Docker容器ID,可以使用以下命令: 2.其中, CONTAINER_NAME 是要查询的容器名称。 3.该命令将返回指定名称的容器ID。请注意,如果存在多个具有相同名称的容器,则该命令将返回所有这些容器的ID。 4.解释一下命令的各个选项: ps :列出正在运行的容器。 -

    2024年02月11日
    浏览(40)
  • docker端口映射详解(随机端口、指定IP端口、随意ip指定端口、指定ip随机端口)

    目录 docker端口映射详解 一、端口映射概述: 二、案例实验: 1、-P选项,随机端口 2、使用-p可以指定要映射到的本地端口。 Local_Port:Container_Port,任意地址的指定端口 Local_IP:Local_Port:Container_Port  映射到指定地址的指定端口 Local_IP::Container_Port  映射到指定地址,但是宿主机端

    2024年02月14日
    浏览(34)
  • docker 构建指定版本的jdk容器,并用docker部署jar包

    有在Linux系统安装docker的经验, 会使用docker常用命令,能明白构建docker容器参数的含义 将如下内容拷贝 到 Dockerfile ,保存并退出。 我用的jdk安装包是 jdk-8u361-linux-aarch64.tar.gz ,你只需要修改它换成你的jdk安装包 用 docker build 完 jdk镜像 后,用命令 docker inspect 容器id | grep Arc

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包