docker - 试图在docker sdk入口点内使用$(command)

标签 docker shell go sdk docker-api

因此,正如标题所述,我正在尝试使用golang docker sdk(docker api)在入口点内执行一个简单的命令。

func RunBatch(imageName, containerName string, entrypoint []string, volumes []string) string {
    ctx := context.Background()
    c := getClient()

    cfg := &container.Config{Entrypoint: entrypoint, Tty: true, Image: imageName}
    hostCfg := &container.HostConfig{Mounts: make([]mount.Mount, len(volumes))}
    netCfg := &network.NetworkingConfig{}
    startCfg := types.ContainerStartOptions{}

    for i := range volumes {
        vols := strings.Split(volumes[i], ":")

        hostCfg.Mounts[i] = mount.Mount{
            Type:   mount.TypeBind,
            Source: config.Config.BaseDir + vols[0],
            Target: vols[1],
        }
    }

    resp, err := c.ContainerCreate(ctx, cfg, hostCfg, netCfg, containerName)
    if err != nil {
        log.Fatal().Err(err)
    }

    err = c.ContainerStart(ctx, resp.ID, startCfg)
    if err != nil {
        log.Fatal().Err(err)
    }

    _, err = c.ContainerWait(ctx, resp.ID)
    if err != nil {
        log.Fatal().Err(err)
    }

    err = c.ContainerRemove(ctx, resp.ID, types.ContainerRemoveOptions{})
    if err != nil {
        log.Fatal().Err(err)
    }

    return resp.ID
}
我在这里传递的入口点是["touch", "/app/$(date +'%T')"]但是创建的文件看起来像$(date +'%T'),我也尝试过使用${date +'%T'}和backqoute失败。
我该如何执行这些?

最佳答案

与shell表单不同,exec表单不会调用命令shell。这意味着不会进行常规的 shell 处理。例如,ENTRYPOINT [ "echo", "$HOME" ]不会对$HOME进行变量替换。如果要进行 shell 处理,则可以使用 shell 形式或直接执行 shell ,例如:ENTRYPOINT [ "sh", "-c", "echo $HOME" ]

关于docker - 试图在docker sdk入口点内使用$(command),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62720425/

相关文章:

窗口命令 : List files in dir & subdir WITHOUT given extensions

http - 如何检查ResponseWriter是否已经写入

python - 无法访问docker容器内的jupyter笔记本

python-3.x - python3:无法打开文件-如何使用Docker访问目录

bash - 如何理解 bash 中的条件?

shell - 在 shell 中打印到文本文件时如何保留新行?

vim - 通常,我如何在 VIM 中使用 "go to definition"?那我怎么用golang呢?

multithreading - 在 goroutine 中执行 I/O 时,Go 会阻塞当前线程吗?

bash - 如何连接到在Docker容器中运行的Netcat?

linux - 如何使用docker获取项目路径