【问题标题】:Why doesn't a command that works inside a docker container work from outside via docker run?为什么在 docker 容器内运行的命令不能通过 docker run 从外部运行?
【发布时间】:2023-04-05 20:17:02
【问题描述】:

当我运行docker run -i -t my_container 时,我有一个名为my_container 的容器,然后我可以运行npm --version 并得到2.7.4

但是,当我尝试使用 docker run --workdir=/home/ubuntu/www my_container npm --version 从容器外部运行相同的命令时,我收到一条错误消息:

无法找到 npm。 lxc-start:容器启动失败。 lxcstart:可以通过设置 --logfile 和 --logpriority 选项来获取更多信息。

我运行的大多数命令都具有相同的行为,而不仅仅是npm。如果这会增加更多线索,我会在 Circle CI 中执行此操作。

【问题讨论】:

    标签: linux npm docker circleci linux-containers


    【解决方案1】:

    可能是因为容器的entrypoint 旨在为您提供一个shell,但不接受参数。可以使用docker inspect查看图片的入口。

    $ docker build -
    FROM busybox
    ENTRYPOINT ["/bin/sh"]
    Sending build context to Docker daemon 2.048 kB
    Sending build context to Docker daemon 
    Step 0 : FROM busybox
     ---> 8c2e06607696
    Step 1 : ENTRYPOINT /bin/sh
     ---> Running in eb5b4d32af96
     ---> ad1286aebbe2
    Removing intermediate container eb5b4d32af96
    Successfully built ad1286aebbe2
    
    13:59 ~ $ docker run --rm -ti ad1286aebbe2 echo hi
    /bin/sh: can't open 'echo'
    

    busybox 官方没有入口点,因此参数被视为命令,这意味着它们直接进入 /bin/sh -c。

    【讨论】:

    • 我使用的 Dockerfile 没有入口点,echo 工作正常,但 npm 没有
    • Dockerfile 可能没有入口点,但如果 FROM 语句属于已经有入口点的映像,则该映像可能仍有入口点。
    • 当我运行 docker inspect 有两个地方出现“入口点”,它们都是“空”
    猜你喜欢
    • 2022-10-21
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2019-08-10
    • 2021-09-30
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多