代码之家  ›  专栏  ›  技术社区  ›  sangelion

如何在Ubuntu docker镜像/容器上执行docker容器的shell内置

  •  0
  • sangelion  · 技术社区  · 7 年前

    谢谢你阅读我的帖子。

    问题:

    # docker ps
    CONTAINER ID        IMAGE                  COMMAND             
    35c8b832403a        ubuntu1604:1   "sh -c /bin/sh"    
    
    # docker exec -i -t 35c8b832403a type type
    rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:262: starting container process caused "exec: \"type\": executable file not found in $PATH"
    
    # Dockerfile
    FROM ubuntu:16.04
    
    ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    RUN apt-get update && apt-get -y upgrade
    ENTRYPOINT ["sh", "-c"]
    CMD ["/bin/bash"]
    

    说明:

    我的目标是以编写docker exec的方式执行内置的“type”shell,如下所示

    docker exec-i-t 35c8b832403a类型(失败)

    docker exec-i-t 35c8b832403a sh-c“type type”(已通过)

    我在谷歌上搜索了一下,在容器中做了一些修改(change/etc/profile,/etc/environment,bashrc),但失败了。

    命令将在容器的默认目录中运行。它是 指令,将改为使用它。

    命令应该是可执行的,链接或引用的命令将 b“将不工作,butdocker exec-ti my_container sh-c”回声a&&

    但似乎是这样 是可能的 来自DOCKER FEDORA (Dockerfile:来自fedora:25)

    # docker ps
    CONTAINER ID        IMAGE                  COMMAND             
    2a17b2338518        fedora25:1   "sh -c /bin/sh" 
    
    # docker exec -i -t 2a17b2338518 type type
    type is a shell builtin
    

    有没有办法在Ubuntu docker上启用这个功能?图像/容器调整?Vagrantfile配置?请帮忙。

    其他:

    图像需要保存而不是导出 .

    2 回复  |  直到 7 年前
        1
  •  0
  •   txomon    7 年前

    以防万一,为了能够按预期执行类型,它需要是路径的一部分。作为一个内置的shell不会有帮助,因为正如你所说的,你不想执行 /bin/bash -c 'type type'

    如果你想要 type 作为内置shell命令执行,这意味着您需要执行shell /bin/bash /bin/sh 然后对其执行“type type”,使其

    毕竟,正如@Henry所说,docker exec是一个完整的命令,将被执行,没有位置 CMD ENTRYPOINT 在上面。

        2
  •  0
  •   Henry    7 年前

    docker exec . 其余参数作为命令,并在已经存在的容器中执行。

    docker run