【问题标题】:No file found when using ENTRYPOINT使用 ENTRYPOINT 时未找到文件
【发布时间】:2019-04-03 06:03:16
【问题描述】:

我正在尝试使用ENTRYPOINT,每当我这样做时,我都会收到no such file or directory的错误

Dockerfile:

FROM ubuntu:18.04

COPY . /home

COPY docker-entrypoint.sh /usr/local/bin/

RUN ln -s /usr/local/bin/docker-entrypoint.sh

WORKDIR /home
RUN chmod 777 /usr/local/bin/docker-entrypoint.sh

ENTRYPOINT ["docker-entrypoint.sh"]

CMD ["/bin/bash"]

我尝试过授予它权限,尝试使用绝对路径运行它,也尝试过this,尝试使用#!/bin/bash#!/bin/sh,最后,我仍然收到文件未找到错误。

我不确定是什么问题。

【问题讨论】:

  • 看起来你的 docker-entrypoint.sh 在/usr/local/bin 但是你用Workdir 切换到/home 目录。如果你想在主目录中使用docker-entrypoint.sh,你必须将文件复制到这个目录。
  • 这也应该不是问题,因为当我执行COPY . /home 时,它也会复制此文件,并且入口点应该能够正确执行此操作?
  • 完整的错误信息是什么,您使用的是什么基础映像?
  • 抱歉,更新了。我正在使用ubuntu:18.04
  • 和错误信息os standard_init_linux.go:207: exec user process caused "no such file or directory"

标签: docker dockerfile


【解决方案1】:

您提出的问题: 我不记得确切原因,但是找不到该文件,因为您将其称为 docker-entrypoint.sh 而不是 ./docker-entrypoint.sh

你很快就会问的问题: 这并不能完全解决您的问题。您已在/usr/local/bin 中为docker-entrypoint.sh 的副本添加了执行权限,但是/home 中的文件的另一个副本首先被找到并且没有执行权限。尝试使用它时会出现权限错误。一个简单的解决方法(取决于您想要做什么)包括修改入口点:

ENTRYPOINT ["/bin/bash", "docker-entrypoint.sh"]

如果您将经常使用 Docker,请提供更多详细信息: 能够进入容器或图像来检查其内容是非常宝贵的。对于基于 ubuntu 的映像,请在某处写下以下行(对于基本上所有其他 linux 操作系统,将 bash 替换为 sh):

docker run -it --rm --entrypoint=bash my_image_name

这将在该映像中打开一个 shell,让您在 Dockerfile 运行的同一环境中进行操作,并调试导致您出现问题的任何问题。

【讨论】:

  • 是的,这确实有帮助。我会记住这一点。谢谢。
  • 但现在我无法使用 docker run -ti container bash 进入 bash
  • 当你在Dockerfile中指定一个ENTRYPOINT时,你需要在运行images时显式覆盖它,并且语法与在容器:比较docker run -ti --entrypoint=bash image_namedocker exec -ti container_name bash
  • 如果这就是你要问的?如果您要询问组合 ENTRYPOINT 和 CMD 以获得默认参数或诸如此类的东西,那超出了 stackoverflow 注释的范围,您需要搜索或提出另一个问题和/或阅读文档;这个文档非常可靠。
  • 没关系我必须这样做 -> stackoverflow.com/questions/39082768/…
猜你喜欢
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多