【问题标题】:Docker: chmod: cannot access 'chmod': No such file or directoryDocker:chmod:无法访问“chmod”:没有这样的文件或目录
【发布时间】:2020-08-18 18:44:49
【问题描述】:

我正在 Ubuntu 18.04 上构建 Rails 应用程序,并尝试使用 docker 设置应用程序的部署。

我有 2 个入口点文件:

  • docker/entrypoints/docker-entrypoint.sh
  • docker/entrypoints/sidekiq-entrypoint.sh

通常,要使文件可执行,我必须在主机终端中运行以下命令:

chmod +x docker/entrypoints/docker-entrypoint.sh
chmod +x docker/entrypoints/sidekiq-entrypoint.sh

但是,我希望在 Dockerfile 中实现这一点,而不必总是在主机的终端上进行。

为此,我在 Dockerfile 中添加了以下命令:

RUN chmod +x docker/entrypoints/docker-entrypoint.sh \
    chmod +x docker/entrypoints/sidekiq-entrypoint.sh
ENTRYPOINT ["./docker/entrypoints/docker-entrypoint.sh"]

但后来我遇到了这个错误:

chmod: 无法访问 'chmod': 没有这样的文件或目录

chmod: 无法访问 '+x': 没有这样的文件或目录

错误:服务“应用程序”构建失败:命令“/bin/sh -c chmod +x docker/entrypoints/docker-entrypoint.sh chmod +x docker/entrypoints/sidekiq-entrypoint.sh”返回非-零代码:1

我尝试了一些解决方案,但到目前为止都没有奏效。任何形式的帮助都将不胜感激。

【问题讨论】:

  • 您需要在两个命令之间添加一些标点符号,RUN chmod ... && chmod ...。反斜杠换行符插入空格,但实际上并没有终止第一个 chmod 命令。
  • 虽然您的解决方案解决了问题,但命令中有错误。它应该是 chmod -x file && chmod -x another file 在你的情况下命令读取 chmod +x file1 chmod +x file2 因为没有 chmod 或 +x 文件,它只会失败
  • @Stefano,我认为命令应该是chmod +x file1 chmod +x file2 而不是chmod -x file && chmod -x another file,因为我正在使文件可执行。如果我要撤销文件的权限,它将是chmod -x file && chmod -x another file。
  • 谢谢@DavidMaze,您能否通过更清晰的示例详细说明您的答案。
  • 这是一个错字。我的意思是+x

标签: ruby-on-rails bash shell docker sh


【解决方案1】:

我是这样解决的:

只需将Dockerfile 中的命令更改为:

RUN chmod +x docker/entrypoints/docker-entrypoint.sh \
    chmod +x docker/entrypoints/sidekiq-entrypoint.sh
ENTRYPOINT ["./docker/entrypoints/docker-entrypoint.sh"]

到这里:

RUN ["chmod", "+x", "/docker/entrypoints/docker-entrypoint.sh"] \
    ["chmod", "+x", "/docker/entrypoints/sidekiq-entrypoint.sh"]
ENTRYPOINT ["./docker/entrypoints/docker-entrypoint.sh"]

另外,请努力查看您将docker-entrypoint.sh 复制/复制到您的工作目录。以下任何一项都可以:

# Copy other project files
COPY . ./

# Docker init
RUN ["chmod", "+x", "docker-entrypoint.sh"]
ENTRYPOINT ["./docker-entrypoint.sh"]

或

# Copy docker entrypoint file
COPY docker-entrypoint.sh ./

# Docker init
RUN ["chmod", "+x", "docker-entrypoint.sh"]
ENTRYPOINT ["./docker-entrypoint.sh"]

或

# Copy docker entrypoint file
COPY /docker/docker-entrypoint.sh ./docker/docker-entrypoint.sh

# Docker init
RUN ["chmod", "+x", "docker/docker-entrypoint.sh"]
ENTRYPOINT ["./docker/docker-entrypoint.sh"]

注意:这取决于您的docker-entrypoint.sh 的位置以及您要将其复制到的位置。

就是这样。

我希望这会有所帮助

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 2013-01-16
    • 2021-02-24
    • 2016-02-26
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多