docker 的服务退出,代码为 'Exit 127':系统找不到指定的路径
docker's service exit with code 'Exit 127' : The system cannot find the path specified
我正在使用 windows 10,将 powershell 作为命令行。
我遵循一个简单的 tutorial 但不幸的是,我正在使用代码 Exit 127
和 The 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 不兼容。对于您的方案,要使所有事情正常进行,您需要做下一步:
在git克隆源代码后,修改envoy-proxy-demos/apps/service.py
,将#!/usr/bin/python3
添加到此文件的开头。
在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...
最后,构建并启动:
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
我正在使用 windows 10,将 powershell 作为命令行。
我遵循一个简单的 tutorial 但不幸的是,我正在使用代码 Exit 127
和 The 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 不兼容。对于您的方案,要使所有事情正常进行,您需要做下一步:
在git克隆源代码后,修改
envoy-proxy-demos/apps/service.py
,将#!/usr/bin/python3
添加到此文件的开头。在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...
最后,构建并启动:
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