所以正如標(biāo)題所說,我正在嘗試使用golang docker sdk(docker api)在入口點(diǎn)內(nèi)執(zhí)行一個(gè)簡單的命令。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}我在這里傳遞的入口點(diǎn)是,["touch", "/app/$(date +'%T')"] 但創(chuàng)建的文件看起來像$(date +'%T'),我也嘗試過${date +'%T'}使用 backqoute 并失敗了。我怎么能執(zhí)行那些?!
2 回答

喵喵時(shí)光機(jī)
TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
與 shell 形式不同,exec 形式不調(diào)用命令 shell。這意味著不會(huì)發(fā)生正常的外殼處理。例如,ENTRYPOINT [ "echo", "$HOME" ]
不會(huì)對(duì)$HOME
. 如果你想要 shell 處理,那么要么使用 shell 形式,要么直接執(zhí)行 shell,例如:ENTRYPOINT [ "sh", "-c", "echo $HOME" ]
.

臨摹微笑
TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
RunBatch
將按字面意思對(duì)待價(jià)值entrypoint
(正如你所經(jīng)歷的那樣)。
您需要為其提供 Golang 等效項(xiàng)( (bash's) 的Time.Format值$(date +%T)
才能成功:
也許:
["touch", fmt.Sprintf("/app/%s",time.Now().Format("15:04:05"))]
注意這
15:04:05
是要遵循的模式,值將是當(dāng)前時(shí)間
- 2 回答
- 0 關(guān)注
- 136 瀏覽
添加回答
舉報(bào)
0/150
提交
取消