在docker容器内 获取swarm节点IP

文章介绍了如何在使用VisualStudio2022和.NET6框架开发的应用中获取DockerSwarm节点的IP地址。首先,通过修改Dockerfile在镜像中安装docker-ce-cli,并更新apt源。然后,在docker-compose.yml中挂载/var/run/docker.sock文件,使容器能与Docker守护进程通信。最后,提供了一段C#代码示例,演示如何通过执行dockerinfo命令来获取Swarm节点的IP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想在应用内获取当前swarm节点的IP
使用.net 6框架 vs2022开发工具

步骤一 在镜像中安装docker-ce-cli

修改Dockerfile,在原FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base 和WORKDIR /app之间添加

FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
### 开始添加内容
WORKDIR /src
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list  ; \
    apt-get  -y   -q update ; \    
### BEGIN docker for CI tests
    apt-get install -y --no-install-recommends  ca-certificates curl gnupg ; \
    install -m 0755 -d /etc/apt/keyrings ; \
    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg ; \
    echo \
         "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
         "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null ; \    
    apt-get update ; \
    apt-get install -y --no-install-recommends docker-ce-cli ; \
    apt remove -y curl gnupg  ; \
    apt clean ; \
    apt autoremove -y ; \
    apt -f install ; 
### END docker for CI tests
### 结束添加
WORKDIR /app

步骤二 挂载 /var/run/docker.sock文件

/var/run/docker.sock简单地说,它是Docker守护进程(Docker daemon)默认监听的Unix域套接字(Unix domain socket),容器中的进程可以通过它与Docker守护进程进行通信。
在docker-compose.yml中挂载

volumes:
      - /var/run/docker.sock:/var/run/docker.sock

获取IP的代码

简单测试代码

try
{
    string fileName = "docker";
    string arguments = "info  -f '{{.Swarm.NodeAddr}}'";
    var psi = new ProcessStartInfo(fileName, arguments) { RedirectStandardOutput = true };
    var process = Process.Start(psi);
    if (process == null)
    {
        Console.WriteLine("查询docker info的Process为null。");

    }
    else
    {
        // *** Read the streams ***
       var outputStream = process.StandardOutput.ReadToEnd();
        Console.WriteLine("IP:" + outputStream.Replace("'", ""));
        process.Close();
    }
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

在Linux系统环境中设置和配置Docker容器以运行Swarm模式,需要按照以下步骤操作: 1. **安装Docker**: 确保已经安装了Docker,如果没有,可以在终端运行 `sudo apt-get update` 和 `sudo apt-get install docker-ce docker-ce-cli containerd.io` (Debian/Ubuntu) 或者 `sudo yum install docker-ce` (CentOS/RHEL)。 2. **启动并加入Swarm**: 运行 `docker swarm init`,这将启动一个Swarm Master。它会生成一个初始任务控制令牌,这是管理员节点的身份标识,用于添加新节点。 ```sh $ docker swarm init ``` 3. **复制令牌**: 你会看到一个类似下面的信息: ``` To add a worker to this cluster, run the following command: docker swarm join \ --token SWMTKN-1-xxxxx-xxxxx-xxxxx-xxxxxxxxxxxx \ <master-ip>:2377 To add an agent with TLS enabled to this cluster, run the following command: docker swarm join \ --token SWMTKN-1-xxxxx-xxxxx-xxxxx-xxxxxxxxxxxx \ <master-ip>:2377 -e SWARM_JOIN_TLS=true ``` 根据提示复制加入命令,其中 `<master-ip>` 替换为你的Master节点IP地址。 4. **添加节点**: 将上述复制的命令发送到新机器上,如果希望启用TLS加密,则需要额外传递`-e SWARM_JOIN_TLS=true`参数。执行此命令后,新节点会成为Swarm的一部分。 5. **验证Swarm状态**: 使用 `docker node ls` 来确认你的节点已经加入了Swarm6. **创建服务**: 通过 `docker service create` 创建一个服务,例如运行一个简单的Web应用: ```sh docker service create --name mywebapp nginx ``` 这将在一个Swarm上下文中运行Nginx容器。 7. **管理和监控**: 可以使用 `docker service ls` 查看所有服务,`docker service inspect` 获取详细信息,`docker stack deploy` 则用于部署更复杂的堆栈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值