You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Go SDK配置Docker容器运行时的环境变量、网络、端口与卷

Go SDK 对应 docker run 命令实现示例

首先需要先安装Docker官方Go SDK依赖:

go get github.com/docker/docker/client github.com/docker/docker/api/types github.com/docker/go-connections/nat

完整实现代码

package main

import (
	"context"
	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/network"
	"github.com/docker/docker/client"
	"github.com/docker/go-connections/nat"
)

func main() {
	// 初始化Docker客户端,默认连接本地Docker daemon
	cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
	if err != nil {
		panic(err)
	}
	defer cli.Close()

	ctx := context.Background()

	// 配置端口映射 对应CLI的 -p 参数
	// 声明容器要暴露的端口
	exposedPorts := nat.PortSet{
		"12345/tcp": struct{}{},
		"8080/tcp":  struct{}{},
	}
	// 配置宿主机到容器的端口绑定规则
	portBindings := nat.PortMap{
		"12345/tcp": []nat.PortBinding{
			{
				HostIP:   "0.0.0.0",
				HostPort: "12345",
			},
		},
		"8080/tcp": []nat.PortBinding{
			{
				HostIP:   "0.0.0.0",
				HostPort: "8080",
			},
		},
	}

	// 容器基础配置
	config := &container.Config{
		Image:        "mydocker/image_name:latest", // 对应CLI的镜像名参数
		Hostname:     "myhost",                      // 对应CLI的 --hostname 参数
		Env: []string{ // 对应CLI的 -e 参数,每个元素格式为 环境变量名=值
			"myvar1=myval1",
			"myvar2=myval2",
		},
		ExposedPorts: exposedPorts,
		Cmd: []string{ // 对应CLI镜像名后面的启动命令
			"command1",
			"command2",
			"command3",
		},
	}

	// 宿主机相关配置
	hostConfig := &container.HostConfig{
		NetworkMode: container.NetworkMode("mynet"), // 对应CLI的 --net 参数
		PortBindings: portBindings,
		Binds: []string{ // 对应CLI的 -v 参数,每个元素直接填 -v 后面的字符串即可
			"my/path/to/data1",
			"my/second-path/to/data2",
		},
	}

	// 网络配置,基础场景直接传nil即可,复杂网络配置可在此处自定义
	networkConfig := &network.NetworkingConfig{}

	// 创建容器 对应CLI的 --name 参数
	resp, err := cli.ContainerCreate(ctx, config, hostConfig, networkConfig, nil, "myname")
	if err != nil {
		panic(err)
	}

	// 启动容器 对应CLI的 -d 参数,后台启动
	if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
		panic(err)
	}
}

疑问点专项说明

  • 环境变量配置:所有-e传入的键值对都直接按KEY=VALUE的字符串格式,填入config.Env切片即可,支持任意数量的环境变量
  • 网络配置:如果只是指定容器加入已存在的网络,直接修改hostConfig.NetworkMode为对应网络名称即可;如果需要配置固定IP等高级网络参数,可在networkConfig中自定义
  • 多端口映射:要同时配置config.ExposedPorts(声明容器要暴露的端口)和hostConfig.PortBindings(配置宿主机映射规则),有多少个端口要映射就加多少条对应记录即可,支持TCP/UDP协议指定
  • 卷配置:所有-v参数后面的内容直接按原字符串填入hostConfig.Binds切片即可,支持匿名卷、宿主机绑定挂载、具名卷三种常用格式

内容的提问来源于stack exchange,提问作者Ugty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:06:06