【问题标题】:Command docker start -a <Container ID> do nothing, "Ubuntu 20.04.02 LTS"命令 docker start -a <Container ID> 什么都不做,“Ubuntu 20.04.02 LTS”
【发布时间】:2021-06-05 20:52:18
【问题描述】:

我正在尝试在创建容器后在 docker 中运行 start 命令。 例如:

$ docker create busybox echo hi there

它给了我那个容器的ID,比如4e59d0fe8584bb4dcaf44dbce100253b6767bf51546edc27f29f39f52ed57957

当我尝试在没有任何标志的情况下启动该容器时,例如:-a 标志 它有效,但它只会再次给我那个ID。 但是当我尝试使用附加-a 标志显示输出时,实际上什么也没发生,即使它没有给我一个错误,只是命令仍在运行而没有发生任何事情。

我也无法终止命令并通过 Ctrl+c 停止执行,所以我不得不关闭终端的唯一选项

我尽量把问题说清楚

【问题讨论】:

    标签: docker ubuntu ubuntu-20.04


    【解决方案1】:

    你可以通过这个命令运行镜像:

    docker run -it busybox
    

    它会带你进入 shell 环境,你有 -i(交互式)-t(tty)终端,这意味着你看到了终端。

    【讨论】:

    • 哦,对不起,我的错。该命令是busybox而不是hello world,我现在要编辑它
    • 没问题,您应该执行相同的命令。只需将ubuntu 替换为busybox,即可进入busybox 容器的sh shell。
    【解决方案2】:

    busybox image 的默认CMD(PID1) 是sh,请参阅this

    对于docker create busybox echo hi thereCOMMAND 变为 echo hi there。这意味着容器启动后,首先执行echo hi there,然后作为PID1退出,容器也退出。如果您使用docker ps,您将找不到您的容器,您可以使用docker ps -a 找到您退出的容器。

    所以,

    • 如果你打算运行一次性任务,那么当容器完成它的任务时,你不能再进入容器是正常的。

    • 如果你打算运行一个守护任务,把容器服务留在那里,你应该选择一个运行后不会完成的命令,那么你的容器就会在那里。

    对于你的情况,为了让你快速理解,你可以使用next快速理解,使用tail -f /dev/null让容器不退出:

    # docker create busybox sh -c "echo hi there; tail -f /dev/null"
    840d7c972a96712e48c9aa391aa63638fb10e12307797e338157105bdfb6934e
    root@shlava:~# docker start 840d7c972a96712e48c9aa391aa63638fb10e12307797e338157105bdfb6934e
    840d7c972a96712e48c9aa391aa63638fb10e12307797e338157105bdfb6934e
    root@shlava:~# docker logs 0ae2d689e63a8688213d1eaf285e555ba3d672b8953f0d2730a1897c9d648a26
    hi there
    root@shlava:~# docker exec -it 0ae2d689e63a8688213d1eaf285e555ba3d672b8953f0d2730a1897c9d648a26 /bin/sh
    / #
    

    【讨论】:

      猜你喜欢
      • 2014-11-17
      • 1970-01-01
      • 2016-02-28
      • 2017-03-22
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多