Docker tini没有该文件或目录。

8

所以我有一个如下的Dockerfile:

FROM ubuntu:latest

WORKDIR /vault

COPY run.sh /vault/run.sh
COPY docker-entrypoint.sh /vault/docker-entrypoint.sh
COPY config/local.json /vault/config/local.json
COPY logs /vault/logs
COPY file /vault/file

ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini
RUN chmod +x /vault/run.sh
RUN chmod 777 /vault/docker-entrypoint.sh

RUN apt-get update && apt-get install -y software-properties-common curl gnupg2 && \
  curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add - && \
  apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" && \
  apt-get update && apt-get install -y \
  vault bash && \
  setcap cap_ipc_lock= /usr/bin/vault

ENTRYPOINT ["/tini", "--" , "/vault/docker-entrypoint.sh"]
#CMD ["sh", "/vault/run.sh"]

文件结构如下:

-docker-vault (dir)
|-Dockerfile (file)
|-docker-entrypoint.sh (file)
|-run.sh
|- file (dir)
|- logs (dir)
|- config (dir)
   |- local.json

当我运行 Dockerfile 时,遇到以下错误:

[FATAL tini (8)] exec  /vault/docker-entrypoint.sh failed: No such file or directory

我已经使用dive检查了文件结构,一切都没问题。每个文件都被复制到了它应该在的位置。因此我认为这可能是ENTRYPOINT命令和tini出了错误,因为CMD可以找到并运行该文件。

以下是dive结果:Dive Results


docker-entrypoint.sh 的第一行是什么?(你可以使用Docker Hub vault镜像,而不是自己制作镜像吗?) - David Maze
@DavidMaze 这是:#!/bin/zsh,我已经尝试使用保险库镜像,但仍然无法工作...我想知道为什么要使用zsh,但这是唯一支持(安装)的替代品。我尝试了#!/usr/bin/dumb-init /bin/sh,但似乎只适用于alpine。当启动它时,它会给我以下错误:/bin/sh: apt-get: 找不到。 - Leopa
如果您可以重写脚本,仅使用POSIX shell语法,并将shebang行更改为#!/bin/sh,则它应该可以在任何基础镜像上运行。如果您的脚本确实需要zsh,则可能不会默认安装。 - David Maze
@DavidMaze 我通过编辑我的入口点来使它在bash中运行,如下所示:ENTRYPOINT ["/tini", "--", "bash", "/vault/docker-entrypoint.sh"] - Leopa
@DavidMaze 现在我得到一个新错误:/vault/docker-entrypoint.sh: line 104: exec: su-exec: not found 第104行是:exec "$@" - Leopa
显示剩余2条评论
1个回答

4

我更新了您的 COPYENTRYPOINT 命令。

请尝试使用以下 Dockerfile:

FROM ubuntu:latest

WORKDIR /vault

COPY ./run.sh ./run.sh
COPY ./docker-entrypoint.sh ./docker-entrypoint.sh
COPY ./config/local.json ./config/local.json
COPY ./logs ./logs
COPY ./file ./file

ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini
RUN chmod +x run.sh
RUN chmod 777 docker-entrypoint.sh

RUN apt-get update && apt-get install -y software-properties-common curl gnupg2 && \
  curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add - && \
  apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" && \
  apt-get update && apt-get install -y \
  vault bash && \
  setcap cap_ipc_lock= /usr/bin/vault

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

1
好的,我已经更新了你的 ENTRYPOINT,现在可以试试了。 - Eranga Heshan
1
[FATAL tini (7)] exec docker-entrypoint.sh 失败:没有这个文件或目录。 - Leopa
1
更新了问题并添加了深入分析的结果。 - Leopa
1
好的,我根据“tiny”文档再次更新了ENTRYPOINT,并在末尾添加了新的CMD。 - Eranga Heshan
1
请将以下内容翻译为中文:将此添加到您的答案中,以便我可以将其标记为正确,并查看是否可以修复其他错误:)非常感谢!`COPY ./run.sh ./run.sh COPY ./docker-entrypoint.sh ./docker-entrypoint.sh COPY ./config/local.json ./config/local.json COPY ./logs ./logs COPY ./file ./fileENTRYPOINT ["/tini", "--", "bash", "/vault/docker-entrypoint.sh"]` - Leopa
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接