Docker for Windows ENTRYPOINT -不存在这样的文件,即使它存在

0ve6wy6x  于 2023-04-29  发布在  Docker
关注(0)|答案(1)|浏览(138)

我有一种感觉,这与我正在为Windows运行Docker的事实有关。也许与Windows和Linux中的文件格式有关。..
我的Docker发生了最奇怪的事情。我使用命令DOCKER BUILD构建的Docker镜像现在在作为容器运行时出错,说找不到ENTRYPOINT中的文件。

[FATAL tini (7)] exec /bin/start_vsftpd.sh failed: No such file or directory

这些图片不是我的,它们是来自GITHUB的GIT repos,100%有效,我过去已经运行过几次了,没有问题(因为我希望你认为我在这里做错了什么)。然而,昨天我对docker文件做了一些修改并重新构建了它们。一切正常。今天由于某种原因它停止工作了。所以我把它们都翻回原来的样子。这仍然没有解决问题。这里是最奇怪的部分-最后我只是删除了所有内容-机器中的repo,所有图像和容器,并重新开始。我再次下载了repo(10个月没有更新),我遇到了同样的问题,当运行容器时,它找不到所述文件。
更多信息-docker文件本身使用COPY命令将sh文件从我的本地机器(repo)复制到镜像中,这确实有效。我知道这一点是因为我设法连接到了正在运行的容器,并且可以看到文件应该在的位置。
我想不出我在机器上改变了什么。有人能告诉我这里可能发生了什么吗?x1c 0d1x Docker文件。它说它找不到的是/bin/start_vsftpd.sh

ARG BASE_IMG=alpine:3.15

FROM $BASE_IMG AS pidproxy

RUN apk --no-cache add alpine-sdk \
 && git clone https://github.com/ZentriaMC/pidproxy.git \
 && cd pidproxy \
 && git checkout 193e5080e3e9b733a59e25d8f7ec84aee374b9bb \
 && sed -i 's/-mtune=generic/-mtune=native/g' Makefile \
 && make \
 && mv pidproxy /usr/bin/pidproxy \
 && cd .. \
 && rm -rf pidproxy \
 && apk del alpine-sdk

FROM $BASE_IMG

COPY --from=pidproxy /usr/bin/pidproxy /usr/bin/pidproxy
RUN apk --no-cache add vsftpd tini

COPY start_vsftpd.sh /bin/start_vsftpd.sh
COPY vsftpd.conf /etc/vsftpd/vsftpd.conf

EXPOSE 21 21000-21010
VOLUME /ftp/ftp

ENTRYPOINT ["/sbin/tini", "--", "/bin/start_vsftpd.sh"]
ffx8fchx

ffx8fchx1#

我找到了这件事的原因,确实是由于Windows!
奇怪的是,如果您通过zip文件方法从GITHUB获得一个仓库的副本,然后将其解压缩,它会保持正确的 Linux 换行符完整。但是,如果您在Visual Studio代码中使用clone GIT repo方法,它似乎会创建具有 windows 换行符的文件。
Docker build运行时,它使用windows行馈送复制.sh文件,这就是映像(我假设任何Linux操作系统)无法看到.sh文件的原因。
要解决此问题,在构建映像之前,需要编辑。sh文件,并将换行符转换为LF,而不是Windows选择的默认值-CRLF。这应该会解决这个问题,但是,我也会建议更改所有文件。我相信在Visual Studio代码中有一个选项可以为所有文件打开这个选项(只需谷歌一下)。

相关问题