首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在通过docker-engine的go sdk api创建的容器中运行启动命令

无法在通过docker-engine的go sdk api创建的容器中运行启动命令
EN

Stack Overflow用户
提问于 2019-02-07 01:30:19
回答 1查看 871关注 0票数 0

我正在尝试用docker engine的go sdk api创建一个容器。我需要在容器中启动时运行一个命令,我将该命令作为参数传递给Client.ContainerCreate()接口。我尝试以不同的方式传递该命令,但每次都发现一些问题。下面是我使用的代码:

代码语言:javascript
复制
resp, err := cli.ContainerCreate(ctx, &container.Config{
                             Image: "hyperledger/fabric-ca",
                             Cmd:   []string{"/bin/sh"," fabric-ca-server start -b admin:adminpw"},
                             Env: []string{"FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server",                    "FABRIC_CA_SERVER_CA_NAME=ca.example.com"}, }, nil, nil, "ca.example.com")
if err != nil {
  fmt.Println(" failed to create container, err:", err)
} else {
  fmt.Println(" Container ID :", resp.ID, "warning:", resp.Warnings, "err:", err)
}

if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
            fmt.Println("failed to start container, err:", err)
    }

1)如果不提供Cmd参数,则创建容器。

代码语言:javascript
复制
Container ID : 02edc80d6545ca2c8089a191ba9174070e1527dc027191e0d7686bff23a9f39d warning: [] err: <nil>

vignesh@vignesh-ThinkPad-E470 ~ $ docker container list
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS               NAMES
02edc80d6545        hyperledger/fabric-ca   "/bin/sh -c 'fabric-…"   7 minutes ago       Up 7 minutes        7054/tcp            ca.example.com

2)如果我提供Cmd参数作为Cmd: []string{"/bin/sh"," fabric-ca-server start -b admin:adminpw"}ContainerCreate()会返回容器Id,但是docker container list不会显示任何容器,docker container inspect会显示状态为exited。

代码语言:javascript
复制
Container ID : c2f7bbc54e09665b0797eeaea43723f3fddf4538db8bf4327362b2535b9a088b warning: [] err: <nil>

vignesh@vignesh-ThinkPad-E470 ~ $ docker container list
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

vignesh@vignesh-ThinkPad-E470 ~ $ docker container inspect c2f7bbc54e09665b0797eeaea43723f3fddf4538db8bf4327362b2535b9a088b
[
    {
        "Id": "c2f7bbc54e09665b0797eeaea43723f3fddf4538db8bf4327362b2535b9a088b",
        "Created": "2019-02-05T20:05:11.360875853Z",
        "Path": "/bin/sh",
        "Args": [
            " fabric-ca-server start -b admin:adminpw"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 127,
            "Error": "",
            "StartedAt": "2019-02-05T20:05:12.448079587Z",
            "FinishedAt": "2019-02-05T20:05:12.644957269Z"
        },

3)如果我提供Cmd参数作为Cmd: []string{"sh -c"," fabric-ca-server start -b admin:adminpw"}ContainerCreate()会返回一个容器Id,但是ContainerStart()会给出"exec:\"sh -c\":在$PATH中找不到可执行文件“的错误。docker container list没有显示任何容器。

代码语言:javascript
复制
 Container ID : d2752eb14267ccc170121d28ea9c51f2cd99227eba3d53b4430bd4b7eeec4787 warning: [] err: <nil>
failed to start container, err: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"sh -c\": executable file not found in $PATH": unknown

vignesh@vignesh-ThinkPad-E470 ~ $ docker container list
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

vignesh@vignesh-ThinkPad-E470 ~ $ docker container inspect d2752eb14267ccc170121d28ea9c51f2cd99227eba3d53b4430bd4b7eeec4787
[
    {
        "Id": "d2752eb14267ccc170121d28ea9c51f2cd99227eba3d53b4430bd4b7eeec4787",
        "Created": "2019-02-06T17:02:13.989788091Z",
        "Path": "sh -c",
        "Args": [
            " fabric-ca-server start -b admin:adminpw"
        ],
        "State": {
            "Status": "created",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 127,
            "Error": "OCI runtime create failed: container_linux.go:348: starting container process caused \"exec: \\\"sh -c\\\": executable file not found in $PATH\": unknown",
            "StartedAt": "0001-01-01T00:00:00Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },

4)如果我提供Cmd参数作为Cmd: []string{"fabric-ca-server start -b admin:adminpw"}ContainerCreate()会返回一个容器Id,但是ContainerStart()会给出\"exec:\"fabric-ca-server start -b admin:adminpw\":$PATH\中找不到可执行文件: unknown“错误。docker container list没有显示任何容器。

代码语言:javascript
复制
 Container ID : d81d4b8f5ae964ec8ef805671a8e4233b41ea363ad890da0218c0ef586d7a72c warning: [] err: <nil>
failed to start container, err: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"fabric-ca-server start -b admin:adminpw\": executable file not found in $PATH": unknown

vignesh@vignesh-ThinkPad-E470 ~ $ docker container list
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
vignesh@vignesh-ThinkPad-E470 ~ $ docker container inspect d81d4b8f5ae964ec8ef805671a8e4233b41ea363ad890da0218c0ef586d7a72c
[
    {
        "Id": "d81d4b8f5ae964ec8ef805671a8e4233b41ea363ad890da0218c0ef586d7a72c",
        "Created": "2019-02-06T17:12:10.443261734Z",
        "Path": "fabric-ca-server start -b admin:adminpw",
        "Args": [],
        "State": {
            "Status": "created",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 127,
            "Error": "OCI runtime create failed: container_linux.go:348: starting container process caused \"exec: \\\"fabric-ca-server start -b admin:adminpw\\\": executable file not found in $PATH\": unknown",
            "StartedAt": "0001-01-01T00:00:00Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },

有一个.yaml文件可以通过docker-compose命令创建相同的容器,其中sh -c 'fabric-ca-server start -b admin:adminpw'作为启动命令传递并创建容器。我正在尝试通过go代码创建那个容器,并面临问题。

因为我没有看到.yaml文件中的命令有任何问题,所以我认为命令很好。我不能弄清楚我错过了什么。请帮助:)

EN

回答 1

Stack Overflow用户

发布于 2019-02-08 12:58:39

在github上发布了这个问题,并在那里得到了答案。https://github.com/moby/moby/issues/38687

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54559372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档