本文整理汇总了Golang中github.com/fsouza/go-dockerclient.Client.InspectContainer方法的典型用法代码示例。如果您正苦于以下问题:Golang Client.InspectContainer方法的具体用法?Golang Client.InspectContainer怎么用?Golang Client.InspectContainer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/fsouza/go-dockerclient.Client
的用法示例。
在下文中一共展示了Client.InspectContainer方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Action
// Action makes a skydns REST API call based on the docker event
func Action(logger *log.Logger, action string, containerId string, docker *dockerapi.Client, TTL uint64, CONSUL string, DOMAIN string) {
//if we fail on inspection, that is ok because we might
//be checking for a crufty container that no longer exists
//due to docker being shutdown uncleanly
container, dockerErr := docker.InspectContainer(containerId)
if dockerErr != nil {
logger.Printf("unable to inspect container:%s %s", containerId, dockerErr)
return
}
var hostname = container.Name[1:]
var ipaddress = container.NetworkSettings.IPAddress
if ipaddress == "" {
logger.Println("no ipaddress returned for container: " + hostname)
return
}
switch action {
case "start":
logger.Println("new container name=" + container.Name[1:] + " ip:" + ipaddress)
Deregister(CONSUL, logger, hostname)
service := Service{Name: hostname, Address: ipaddress}
Register(CONSUL, logger, &service)
case "stop":
logger.Println("removing container name=" + container.Name[1:] + " ip:" + ipaddress)
Deregister(CONSUL, logger, hostname)
case "destroy":
logger.Println("removing container name=" + container.Name[1:] + " ip:" + ipaddress)
Deregister(CONSUL, logger, hostname)
default:
}
}
示例2: launchContainer
func launchContainer(client *docker.Client, containerImageName, name string) (*docker.Container, error) {
images, err := client.ListImages(docker.ListImagesOptions{Filter: containerImageName})
if err != nil {
return nil, err
}
targetImageId := images[0].ID
container, err := client.CreateContainer(docker.CreateContainerOptions{
Name: name,
Config: &docker.Config{
Image: targetImageId,
},
})
if err != nil {
return nil, err
}
if err := client.StartContainer(container.ID, &docker.HostConfig{PublishAllPorts: true}); err != nil {
return nil, err
}
return client.InspectContainer(container.ID)
}
示例3: containerAddress
func containerAddress(client *dockerapi.Client, containerId string) (string, error) {
container, err := client.InspectContainer(containerId)
if err != nil {
return "", err
}
return container.NetworkSettings.IPAddress, nil
}
示例4: Boot
func Boot(client *docker.Client, opt *docker.CreateContainerOptions,
exitCh chan error) (*docker.Container, error) {
log.Debugf("Creating container for image %s", opt.Config.Image)
container, err := client.CreateContainer(*opt)
if err != nil {
return container, err
}
log.Debugf("Starting container %s", container.ID)
go func() {
exitCh <- dockerpty.Start(client, container, opt.HostConfig)
}()
trial := 0
for {
container, err = client.InspectContainer(container.ID)
if container.State.StartedAt.Unix() > 0 {
break
}
if trial > 30 {
return container, fmt.Errorf("container %s seems not started. state=%#v", container.ID, container.State)
}
trial += 1
time.Sleep(time.Duration(trial*100) * time.Millisecond)
}
log.Debugf("container state=%#v", container.State)
return container, nil
}
示例5: getContainers
func getContainers(client *docker.Client) []*docker.Container {
allContainers, _ := client.ListContainers(docker.ListContainersOptions{All: false})
var containers []*docker.Container
for _, c := range allContainers {
container, _ := client.InspectContainer(c.ID)
containers = append(containers, container)
}
return containers
}
示例6: getContainers
func getContainers(client *docker.Client) ([]*RuntimeContainer, error) {
apiContainers, err := client.ListContainers(docker.ListContainersOptions{
All: false,
Size: false,
})
if err != nil {
return nil, err
}
containers := []*RuntimeContainer{}
for _, apiContainer := range apiContainers {
container, err := client.InspectContainer(apiContainer.ID)
if err != nil {
log.Printf("error inspecting container: %s: %s\n", apiContainer.ID, err)
continue
}
registry, repository, tag := splitDockerImage(container.Config.Image)
runtimeContainer := &RuntimeContainer{
ID: container.ID,
Image: DockerImage{
Registry: registry,
Repository: repository,
Tag: tag,
},
Name: strings.TrimLeft(container.Name, "/"),
Gateway: container.NetworkSettings.Gateway,
Addresses: []Address{},
Env: make(map[string]string),
}
for k, v := range container.NetworkSettings.Ports {
address := Address{
IP: container.NetworkSettings.IPAddress,
Port: k.Port(),
}
if len(v) > 0 {
address.HostPort = v[0].HostPort
}
runtimeContainer.Addresses = append(runtimeContainer.Addresses,
address)
}
for _, entry := range container.Config.Env {
parts := strings.Split(entry, "=")
runtimeContainer.Env[parts[0]] = parts[1]
}
containers = append(containers, runtimeContainer)
}
return containers, nil
}
示例7: Start
//监听到容器启动时做的操作
func Start(client *docker.Client, event *docker.APIEvents) {
fmt.Println("Received start event %s for container %s", event.Status, event.ID[:12])
container, err := client.InspectContainer(event.ID[:12])
common.ErrorHandle(err)
ipAddress := container.NetworkSettings.IPAddress
include := common.GetConfig("Section", "include")
if include == "*" || strings.Contains(","+include+",", ","+common.SubstrAfter(container.Name, 0)+",") {
common.AppendFile(common.GetConfig("Section", "hostFile"), ipAddress+" "+getDomainName(container.Name))
restartDns()
}
}
示例8: inspect
func inspect(client *dockerClient.Client, id string) (*dockerClient.Container, error) {
c, err := client.InspectContainer(id)
if err != nil {
return nil, err
}
if strings.HasPrefix(c.Name, "/") {
c.Name = c.Name[1:]
}
return c, err
}
示例9: waitForExist
func waitForExist(t *testing.T, client *docker.Client, handle *DockerHandle) {
tu.WaitForResult(func() (bool, error) {
container, err := client.InspectContainer(handle.ContainerID())
if err != nil {
if _, ok := err.(*docker.NoSuchContainer); !ok {
return false, err
}
}
return container != nil, nil
}, func(err error) {
t.Fatalf("err: %v", err)
})
}
示例10: DoInspectContainerBenchmark
// DoInspectContainerBenchmark does periodically InspectContainer with specific interval, returns latencies
// of all the calls in nanoseconds
func DoInspectContainerBenchmark(client *docker.Client, interval, testPeriod time.Duration, containerIDs []string) []int {
startTime := time.Now()
latencies := []int{}
rand.Seed(time.Now().Unix())
for {
containerID := containerIDs[rand.Int()%len(containerIDs)]
start := time.Now()
client.InspectContainer(containerID)
latencies = append(latencies, int(time.Since(start).Nanoseconds()))
if time.Now().Sub(startTime) >= testPeriod {
break
}
if interval != 0 {
time.Sleep(interval)
}
}
return latencies
}
示例11: dockerEventListener
// dockerEventListener читает из канала события от докера и реагирует на них
func dockerEventListener(server *SSHServer, client *docker.Client, events chan *docker.APIEvents) {
for {
select {
case event, ok := <-events:
if !ok {
log.Printf("Docker daemon connection interrupted")
break
}
// Если был запущен контейнер, проверяем что у него есть 22 порт и добавляем
if event.Status == "start" {
log.Printf("Container %s was started", event.ID[:12])
container, _ := client.InspectContainer(event.ID)
if len(container.NetworkSettings.Ports) == 0 {
continue
}
for port, mapping := range container.NetworkSettings.Ports {
if port == "22/tcp" {
log.Printf("Added %v: %s:%v\n", container.ID[:12], mapping[0].HostIP, mapping[0].HostPort)
server.AddHost(container.ID, fmt.Sprintf("%s:%v", mapping[0].HostIP, mapping[0].HostPort))
}
}
}
// Если контейнер был удалён/убит, убераем его
if event.Status == "stop" || event.Status == "die" {
log.Printf("Container %s was removed", event.ID[:12])
server.RemoveContainer(event.ID)
}
case <-time.After(10 * time.Second):
if err := client.Ping(); err != nil {
log.Printf("Unable to ping docker daemon: %s", err)
}
}
}
}
示例12: listContainers
func listContainers(client *docker.Client, all bool) (map[string]*docker.Container, error) {
var opts docker.ListContainersOptions
if all {
opts.All = true
} else {
opts.Filters = map[string][]string{"status": []string{"running"}}
}
l, err := client.ListContainers(opts)
if err != nil {
return nil, err
}
m := make(map[string]*docker.Container, 0)
for _, c := range l {
info, err := client.InspectContainer(c.ID)
if err != nil {
DEBUG("failed to inspect container: %s", err)
}
m[info.Name] = info
}
return m, nil
}
示例13: Die
//监听到容器消亡时做的操作
func Die(client *docker.Client, event *docker.APIEvents) {
fmt.Println("Received die event %s for container %s", event.Status, event.ID[:12])
container, err := client.InspectContainer(event.ID[:12])
common.ErrorHandle(err)
include := common.GetConfig("Section", "include")
if include == "*" || strings.Contains(","+include+",", ","+common.SubstrAfter(container.Name, 0)+",") {
strData := common.ReadFile(common.GetConfig("Section", "hostFile"))
arrData := strings.Split(strData, "\n")
strData = ""
for i := 0; i < len(arrData); i++ {
if strings.Index(arrData[i], getDomainName(container.Name)) >= 0 {
continue
}
if strData == "" {
strData = arrData[i]
} else {
strData += "\n" + arrData[i]
}
}
common.SaveFile(common.GetConfig("Section", "hostFile"), strData)
restartDns()
}
}
示例14: createAndStartRouterContainer
// createAndStartRouterContainer is responsible for deploying the router image in docker. It assumes that all router images
// will use a command line flag that can take --master which points to the master url
func createAndStartRouterContainer(dockerCli *dockerClient.Client, masterIp string) (containerId string, err error) {
ports := []string{"80", "443"}
portBindings := make(map[dockerClient.Port][]dockerClient.PortBinding)
exposedPorts := map[dockerClient.Port]struct{}{}
for _, p := range ports {
dockerPort := dockerClient.Port(p + "/tcp")
portBindings[dockerPort] = []dockerClient.PortBinding{
{
HostPort: p,
},
}
exposedPorts[dockerPort] = struct{}{}
}
containerOpts := dockerClient.CreateContainerOptions{
Config: &dockerClient.Config{
Image: getRouterImage(),
Cmd: []string{"--master=" + masterIp, "--loglevel=4"},
ExposedPorts: exposedPorts,
},
}
container, err := dockerCli.CreateContainer(containerOpts)
if err != nil {
return "", err
}
dockerHostCfg := &dockerClient.HostConfig{NetworkMode: "host", PortBindings: portBindings}
err = dockerCli.StartContainer(container.ID, dockerHostCfg)
if err != nil {
return "", err
}
running := false
//wait for it to start
for i := 0; i < dockerRetries; i++ {
c, err := dockerCli.InspectContainer(container.ID)
if err != nil {
return "", err
}
if c.State.Running {
running = true
break
}
time.Sleep(time.Second * dockerWaitSeconds)
}
if !running {
return "", errors.New("Container did not start after 3 tries!")
}
return container.ID, nil
}
示例15: registerContainers
func registerContainers(docker *dockerapi.Client, events chan *dockerapi.APIEvents, dns resolver.Resolver, containerDomain string, hostIP net.IP) error {
// TODO add an options struct instead of passing all as parameters
// though passing the events channel from an options struct was triggering
// data race warnings within AddEventListener, so needs more investigation
if events == nil {
events = make(chan *dockerapi.APIEvents)
}
if err := docker.AddEventListener(events); err != nil {
return err
}
if !strings.HasPrefix(containerDomain, ".") {
containerDomain = "." + containerDomain
}
getAddress := func(container *dockerapi.Container) (net.IP, error) {
for {
if container.NetworkSettings.IPAddress != "" {
return net.ParseIP(container.NetworkSettings.IPAddress), nil
}
if container.HostConfig.NetworkMode == "host" {
if hostIP == nil {
return nil, errors.New("IP not available with network mode \"host\"")
} else {
return hostIP, nil
}
}
if strings.HasPrefix(container.HostConfig.NetworkMode, "container:") {
otherId := container.HostConfig.NetworkMode[len("container:"):]
var err error
container, err = docker.InspectContainer(otherId)
if err != nil {
return nil, err
}
continue
}
return nil, fmt.Errorf("unknown network mode", container.HostConfig.NetworkMode)
}
}
addContainer := func(containerId string) error {
container, err := docker.InspectContainer(containerId)
if err != nil {
return err
}
addr, err := getAddress(container)
if err != nil {
return err
}
err = dns.AddHost(containerId, addr, container.Config.Hostname, container.Name[1:]+containerDomain)
if err != nil {
return err
}
env := parseContainerEnv(container.Config.Env, "DNS_")
if dnsDomains, ok := env["DNS_RESOLVES"]; ok {
if dnsDomains == "" {
return errors.New("empty DNS_RESOLVES, should contain a comma-separated list with at least one domain")
}
port := 53
if portString := env["DNS_PORT"]; portString != "" {
port, err = strconv.Atoi(portString)
if err != nil {
return errors.New("invalid DNS_PORT \"" + portString + "\", should contain a number")
}
}
domains := strings.Split(dnsDomains, ",")
err = dns.AddUpstream(containerId, addr, port, domains...)
if err != nil {
return err
}
}
if bridge := container.NetworkSettings.Bridge; bridge != "" {
bridgeAddr := net.ParseIP(container.NetworkSettings.Gateway)
err = dns.AddHost("bridge:"+bridge, bridgeAddr, bridge)
if err != nil {
return err
}
}
return nil
}
containers, err := docker.ListContainers(dockerapi.ListContainersOptions{})
if err != nil {
return err
}
for _, listing := range containers {
if err := addContainer(listing.ID); err != nil {
log.Printf("error adding container %s: %s\n", listing.ID[:12], err)
}
//.........这里部分代码省略.........