Docker容器Git Pull异常:交互式启动后仓库未更新求助
问题原因
当你执行docker run -it test bash时,传入的bash命令会覆盖Dockerfile中定义的CMD指令,导致原来的cd PortOS-WrokSpace && git pull && ls && pwd完全没有执行,所以仓库不会更新。而直接执行docker run -it test时,容器会按CMD的指令运行,git pull自然生效。
解决方案
方案1:临时启动时先执行更新再进入shell
每次启动容器时,手动指定先执行git pull再进入bash:
docker run -it test sh -c "cd PortOS-WrokSpace && git pull && bash"
方案2:修改Dockerfile,确保更新逻辑必执行
这种方式更可靠,不管怎么启动容器,都会先拉取最新代码:
- 创建一个启动脚本
start.sh,内容如下:
#!/bin/bash # 拉取最新代码 cd /PortOS-WrokSpace && git pull # 执行用户传入的后续命令(比如bash) exec "$@"
- 修改Dockerfile,将脚本设为入口指令:
FROM ubuntu:latest RUN apt update && apt upgrade -y && apt install git -y RUN git clone https://github.com/Sanjay-Sagar-2005/PortOS-WrokSpace.git /PortOS-WrokSpace COPY start.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/start.sh ENTRYPOINT ["start.sh"] CMD ["bash"]
修改后,不管是直接运行docker run -it test,还是指定docker run -it test bash,都会先执行git pull,再进入交互式shell。
方案3:在shell配置中自动执行更新(可选)
如果只在交互式bash中需要自动更新,可以把命令加到容器的~/.bashrc里:
在Dockerfile中添加:
RUN echo 'cd /PortOS-WrokSpace && git pull' >> ~/.bashrc
但注意:这种方式只在交互式登录shell中生效,且如果容器启动时不进入bash,更新逻辑不会执行,适合特定场景。
内容的提问来源于stack exchange,提问作者SANJAY SAGAR
相关产品推荐
相关产品推荐

