2017-08-01 3 views
2

下記のドッカーコマンドを実行したい docker run ajaycs14/hello-world -p 1527:80 -ddockerを実行するにはGo Sdkを使用してドッカーを実行しますか?

上記の達成方法Docker Go SDK

画像を実行するためのサンプルコードは以下の通りです。正式な文書では、以下のコードを変更してポートとデタッチモードなどのオプションを取る方法を教えてください。上記のコマンド(docker run ajaycs14/hello-world -p 1527:80 -d)三番目のパラメータは、あなたが使用する必要があるHostConfigContainerCreate方法で

package main 

import (
    "fmt" 
    "io" 
    "os" 

    "github.com/docker/docker/api/types" 
    "github.com/docker/docker/api/types/container" 
    "github.com/docker/docker/client" 
    "golang.org/x/net/context" 
) 

func main() { 
    ctx := context.Background() 
    cli, err := client.NewEnvClient() 
    if err != nil { 
    panic(err) 
    } 

    imageName := "bfirsh/reticulate-splines" 

    out, err := cli.ImagePull(ctx, imageName, types.ImagePullOptions{}) 
    if err != nil { 
    panic(err) 
    } 
    io.Copy(os.Stdout, out) 

    resp, err := cli.ContainerCreate(ctx, &container.Config{ 
    Image: imageName, 
    }, nil, nil, "") 
    if err != nil { 
    panic(err) 
    } 

    if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { 
    panic(err) 
    } 

    fmt.Println(resp.ID) 
} 

答えて

2

。ポートの設定に興味がある場合は、PortBindingsフィールドを参照してください。また、コンテナの公開ポートを指定する必要があります。これは、container configuration(第2パラメータ)にExposedPortsを入力することで行うことができます。
cliツールの代わりにAPIを使用しているため、コンテナはデフォルトでdaemonモードで起動されると仮定します。私は私のポートを見ることができますdocker ps --allため

package main 

import (
    "context" 

    "github.com/docker/docker/api/types" 
    "github.com/docker/docker/api/types/container" 
    "github.com/docker/docker/client" 
    "github.com/docker/go-connections/nat" 
) 

func main() { 
    cli, err := client.NewEnvClient() 
    if err != nil { 
     panic(err) 
    } 

    ctx := context.Background() 
    resp, err := cli.ContainerCreate(ctx, &container.Config{ 
     Image:  "mongo", 
     ExposedPorts: nat.PortSet{"8080": struct{}{}}, 
    }, &container.HostConfig{ 
     PortBindings: map[nat.Port][]nat.PortBinding{nat.Port("8080"): {{HostIP: "127.0.0.1", HostPort: "8080"}}}, 
    }, nil, "mongo-go-cli") 
    if err != nil { 
     panic(err) 
    } 

    if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { 
     panic(err) 
    } 
} 

と出力で:PORTS 127.0.0.1:8080->8080/tcp, 27017/tcp

+0

はい、コンテナはデーモンモードで起動される。ここ

は実施例です。サンプルコードを提供すると役に立ちます。 – irobo

+0

'RESP、ERR = cli.ContainerCreate(CTX、&container.Config { イメージ:imagenameの、 }、&container.HostConfig { \t PortBindings:{ "9300:80"}、 }、ゼロ、 "") もしエラーが発生した場合は、エラーが発生しましたか? パニック(エラー) } '私はこれを試していますが、動作していません。 – irobo

+1

私は答えを更新しました。 –

関連する問題