Py学习  »  docker

Docker容器在本地机器上成功启动,但无法在Kubernetes集群中执行CMD命令

David Doe • 5 年前 • 1609 次点击  

我有一个Docker映像,可以在本地计算机上运行,没有问题,但是当我尝试在Kubernetes集群中运行它时,容器无法启动,因为它无法执行应用程序的启动命令。

我正在复制 dist 因为那是我打包应用程序的地方。如果我想在本地运行,我只需要运行 ./dist/bin/start 然后应用程序就会启动。这是目录的结构。

dist/
├── bin
│   └── start
├── conf
│   ├── application.conf
│   ├── routes
│   └── secure.conf
├── my-play-framework-api-0.1.0-SNAPSHOT
└── lib

这是 Dockerfile 我正在使用的。

FROM openjdk:11-jre-slim
COPY dist /dist
EXPOSE 9000 9443
WORKDIR /dist
CMD ["/dist/bin/start","-Dhttps.port=9443"]

我可以使用 docker run 命令。

当我从kubernetes集群的gitlab注册表中提取这个图像时,问题就开始出现了。当我 describe 集装箱正在运行的吊舱。因为找不到 /dist 即使在我把它复制到dockerfile之后。

Events:
  Type     Reason     Age                  From                                                    Message
  ----     ------     ----                 ----                                                    -------
  Normal   Scheduled  12m                  default-scheduler                                       Successfully assigned <REDACTED>/<REDACTED>-<REDACTED> to <REDACTED>.eu-central-1.compute.internal
  Normal   Pulled     11m (x5 over 12m)    kubelet, <REDACTED>.eu-central-1.compute.internal  Successfully pulled image "<REDACTED>/<REDACTED>/<REDACTED>/<REDACTED>"
  Normal   Created    11m (x5 over 12m)    kubelet, <REDACTED>.eu-central-1.compute.internal  Created container
  Warning  Failed     11m (x5 over 12m)    kubelet, <REDACTED>.eu-central-1.compute.internal  Error: failed to start container "<REDACTED>": Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/dist/bin/start\": stat /dist/bin/start: no such file or directory": unknown
  Normal   Pulling    10m (x6 over 12m)    kubelet, <REDACTED>.eu-central-1.compute.internal  pulling image "registry.gitlab.com/<REDACTED>/<REDACTED>/<REDACTED>"
  Warning  BackOff    119s (x44 over 11m)  kubelet, <REDACTED>.eu-central-1.compute.internal  Back-off restarting failed container

有什么东西我遗漏了吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39919
 
1609 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Ijaz Ahmad Khan
Reply   •   1 楼
Ijaz Ahmad Khan    6 年前

也许你需要修复你的dockerfile,并注意docker指令的顺序和一些最佳实践。

FROM openjdk:11-jre-slim
WORKDIR /dist
COPY dist/* .
EXPOSE 9000 9443

CMD ["/dist/bin/start","-Dhttps.port=9443"]

首先进行本地测试,通过执行到容器中并执行 ls