ホストポートを指定しないことで動的にコンテナを起動しています。  
その後、どのポートで起動したか取得しようとしています。

ただ、`[]` となり取得できていません。

```

    fmt.Printf("Ports: %+v\n", c.NetworkSettings.Ports)
    fmt.Printf("Ports[newP]: %+v\n", c.NetworkSettings.Ports[newP])
    // Ports: map[3000/tcp:[] 3001/tcp:[]]
    // Ports[newP]: []
    
```

下記のソースコード実行後に `docker port container-name 3000`
でホストポートの取得はできているため、起動まではうまくいっていると考えています。  
<https://docs.docker.com/engine/reference/commandline/port/>

Docker Python SDK でも同様のようですが、reload することで取得しているようです。  
<https://stackoverflow.com/questions/69720234/retrieve-the-host-port-of-a-
container-launched-from-docker-sdk-for-python>

[SDK リファレンス](https://pkg.go.dev/github.com/docker/docker/client)
での探し方が間違っているのか、reload は見つかりませんでした。  
Docker Go SDK ではどのようにすればよいでしょうか。

動的ポートで起動時のポート番号取得方法を教えていただきたいです。

```

    containerName := "container-name"
    
    ctx := context.Background()
    cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
    if err != nil {
        fmt.Println(err)
        return
    }
    
    // コンテナ作成
    resp, err := cli.ContainerCreate(ctx, &container.Config{
        Image:        imageName,
        ExposedPorts: nat.PortSet{nat.Port("3000"): struct{}{}},
    }, &container.HostConfig{
        PortBindings: nat.PortMap{
            // 動的ポート
            nat.Port("3000/tcp"): []nat.PortBinding{{HostPort: ""}},
        },
    }, nil, nil, containerName)
    if err != nil {
        fmt.Println(err)
        return
    }
    
    // コンテナ起動
    if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
        fmt.Println(err)
        return
    }
    
    // ポート番号を取得
    c, err := cli.ContainerInspect(ctx, containerName)
    if err != nil {
        fmt.Println(err)
        return
    }
    
    newP, err := nat.NewPort("tcp", "3000")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("Ports: %+v\n", c.NetworkSettings.Ports)
    fmt.Printf("Ports[newP]: %+v\n", c.NetworkSettings.Ports[newP])
    // Ports: map[3000/tcp:[] 3001/tcp:[]]
    // Ports[newP]: []
    
```
CC BY-SA 4.0
2022-09-26T09:07:08.673
91313
2022-09-26T09:17:36.373
2022-09-26T09:17:36.373
54551
54551
question
docker go
動的ポートで起動後にホストポートを取得できない（Docker Go SDK）