前言
今天第一次在服务器上使用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
运行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终端的颜色也会发生变化
运行前
运行后
始终产生类似如下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下的项目脚本文件的文件格式,无语凝噎:
后之览者,亦将有感于斯文。