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