docker 的服务退出,代码为 'Exit 127':系统找不到指定的路径

docker's service exit with code 'Exit 127' : The system cannot find the path specified

我正在使用 windows 10,将 powershell 作为命令行。 我遵循一个简单的 tutorial 但不幸的是,我正在使用代码 Exit 127The system cannot find the path specified.

获取服务退出

在 运行 命令之后:

docker-compose ps
The system cannot find the path specified.
                 Name                               Command                State                              Ports
--------------------------------------------------------------------------------------------------------------------------------------------
httproute-simple-match_front-envoy_1     /docker-entrypoint.sh /bin ...   Up         10000/tcp, 0.0.0.0:8000->80/tcp, 0.0.0.0:8001->8001/tcp
httproute-simple-match_service_blue_1    /bin/sh -c /usr/local/bin/ ...   Exit 127
httproute-simple-match_service_green_1   /bin/sh -c /usr/local/bin/ ...   Exit 127
httproute-simple-match_service_red_1     /bin/sh -c /usr/local/bin/ ...   Exit 127

而其他 docker 命令如

docker-compose ps --service 给出:

前特使 service_blue service_green service_red`

有效。

我真的很困惑如何解决它,我看过很多文章,但其中 none 个与此有关。

如果您没有为 Docker VM

检查首选项 -> 高级并尝试添加更多 RAM。

看到接下来的时候,首先要做的就是查看exit容器的log,看看到底发生了什么。

docker-compose ps
The system cannot find the path specified.
                 Name                               Command                State                              Ports
--------------------------------------------------------------------------------------------------------------------------------------------
httproute-simple-match_front-envoy_1     /docker-entrypoint.sh /bin ...   Up         10000/tcp, 0.0.0.0:8000->80/tcp, 0.0.0.0:8001->8001/tcp
httproute-simple-match_service_blue_1    /bin/sh -c /usr/local/bin/ ...   Exit 127
httproute-simple-match_service_green_1   /bin/sh -c /usr/local/bin/ ...   Exit 127
httproute-simple-match_service_red_1     /bin/sh -c /usr/local/bin/ ...   Exit 127

然后,如果像next一样查看exit容器的log,会发现报错:

C:\test\envoy-proxy-demos\httproute-simple-match>docker logs httproute-simple-match_service_red_1
/bin/sh: /usr/local/bin/start_service.sh: not found

当您看到这个时,很可能是因为 windows 上的文件格式与 linux 不兼容。对于您的方案,要使所有事情正常进行,您需要做下一步:

  1. 在git克隆源代码后,修改envoy-proxy-demos/apps/service.py,将#!/usr/bin/python3添加到此文件的开头。

  2. 在git-bash的帮助下,进入envoy-proxy-demos/apps,将以下文件格式从dos改为unix如下:

    $ dos2unix start_service.sh service.py
    dos2unix: converting file start_service.sh to Unix format...
    dos2unix: converting file service.py to Unix format...
    
  3. 最后,构建并启动:

    docker-compose up --build -d
    

    注意:如果您过去已经执行过上述命令,您可能仍会使用构建的缓存,因此您的更改可能不会生效,如果这是您的事,请改为执行下一步:

    docker-compose build --no-cache
    docker-compose up --build -d
    

然后,你可以看到上面的命令完成后容器都起来了:

                 Name                               Command               State                            Ports
-----------------------------------------------------------------------------------------------------------------------------------------
httproute-simple-match_front-envoy_1     /docker-entrypoint.sh /bin ...   Up      10000/tcp, 0.0.0.0:8000->80/tcp, 0.0.0.0:8001->8001/tcp
httproute-simple-match_service_blue_1    /bin/sh -c /usr/local/bin/ ...   Up      10000/tcp, 80/tcp
httproute-simple-match_service_green_1   /bin/sh -c /usr/local/bin/ ...   Up      10000/tcp, 80/tcp
httproute-simple-match_service_red_1     /bin/sh -c /usr/local/bin/ ...   Up      10000/tcp, 80/tcp