Docker:exec /xxx.sh no such file or directory

前言

今天第一次在服务器上使用Docker,踩了很多坑,记录一下。有些通过gpt顺利解决了,而另外一些,如标题所示的bug,实在匪夷所思!最终还是通过在网上查找前人经验才得以解决。不禁感叹人类智慧的强大,在debug中若是太过依赖gpt,那很多时候可能真的只会在原地兜圈子。

正文

  • 克隆项目

在服务器上从github上git clone时,发现连接始终超时,但服务器明显是能ping通github的。
请添加图片描述

所以我最后选择先在windows主机上git clone项目,再通过vscode把整个项目复制到远程服务器上(这也埋下了今天最大的一个坑!!!)。

后来发现,在服务器上配置好ssh后,不使用http方式,而是用ssh方式就能十分丝滑地把项目成功git clone,具体原因还不是很清楚。

配置ssh:

#生成ssh密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
#显示生成的公钥,复制内容
cat ~/.ssh/id_rsa.pub
#在github上添加ssh公钥
1. 登录到你的 GitHub 账户,点击右上角的头像,选择 Settings
2. 在左侧菜单中,选择 SSH and GPG keys
3. 点击 New SSH key 按钮
4. 点击 Add SSH key
#测试ssh配置
ssh -T git@github.com
输出:Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.

然后就可以使用ssh克隆仓库了

git clone git@github.com:username/repository.git
  • Docker配置

运行build_docker.sh文件时报错:

(base) byy@tju:~/mm_masking$ bash scripts/build_docker.sh 
ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied

这需要将当前用户添加到Docker组

#添加当前用户
sudo usermod -aG docker $(whoami)
#使更改生效
newgrp docker
#验证是否已添加
groups $(whoami)

添加前后,vscode终端的颜色也会发生变化
运行前

运行后
请添加图片描述

  • 运行环境配置.sh文件

始终产生类似如下no such file or directory的报错

exec /entrypoint.sh: no such file or directory

要是问gpt,它只会让你检查文件是否存在、路径是否正确等,在原地兜兜转转,毫无进展。

最终我还是求助百度,在很多篇博文中都找到了解决方法:

解决Linux运行shell脚本提示No such file or directory错误提示

docker ENTRYPOINT执行shell报错no such file or directory

大体意思就是:

脚本文件是dos格式的,得改成linux下的unix格式

通过 vim xxx.sh打开文件,输入 :set ff 查看格式

在这里插入图片描述

更改格式为unix,输入 :set ff=unix

一开始我是不敢相信的,因为无法理解明明全程都是在linux服务器上运行的,为什么文件格式会是dos?而且我也并没有如参考的博文中所提到的那样“在windows下编写脚本文件”。

后来我突然想到了我处理第一个bug时,是直接把项目下到本地windows主机,然后再复制到远程服务器的。。。。

查看此时windows下的项目脚本文件的文件格式,无语凝噎:

在这里插入图片描述

后之览者,亦将有感于斯文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值