当前位置: 首页 > article >正文

docker踩坑记录

踩坑记录

1.1 后台启动容器,实际没有启动

现象: 后台启动centos,结果执行docker ps命令,容器没启动。
在这里插入图片描述
原因: docker是以容器启动的,必须要有个前台进程,若是全部都是后台deamon守护进程,没有一个前台进程,则会自动停止容器。

解决方案:

  1. 去除-d,加上 -it 开启容器交互式终端
  2. 执行docker run -d centos /bin/bash -c "while true;echo test;" ,通过bash执行死循环shell语句,将容器进程卡主

1.2 dockerfile中 ADD和COPY命令中的宿主机文件都需要在dockerfile同级目录

现象:
编辑dockerfile文件构建tomcat镜像,其中存在ADD指令,执行build构建命令后,提示文件不存在。

# pwd /root/docker/test/dockerfiletest 
# dockerfiletest文件目录:/root/docker/test/dockerfiletest 
[root@centos7 dockerfiletest]# cat dockerfile-tomcattest 
FROM centos
MAINTAINER wl<wl@126.com>
ENV WORKPATH /usr/local
WORKDIR $WORKPATH

ADD /root/apache-tomcat-9.0.85.tar.gz /usr/local/ #apache-tomcat-9.0.85.tar.gz没在dockerfiletest文件目录,导致出现
ADD /root/jdk-8u391-linux-x64.tar.gz /usr/local/

ENV JAVA_HOME /usr/local/jdk1.8.0_391
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.85
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.85
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/lib
EXPOSE 8080
CMD $CATALINA_HOME/bin/startup.sh && tail -f $CATALINA_HOME/logs/catalina.out

在这里插入图片描述
解决方案:

  1. 将两个依赖的压缩包cp到dockerfile文件目录
  2. 修改dockerfile文件,将压缩包文件路径 改为当前目录下
    ADD apache-tomcat-9.0.85.tar.gz /usr/local/
    ADD jdk-8u391-linux-x64.tar.gz /usr/local/
    

1.3 dockerfile中存在EXPOSE port,在启动容器时还是需要-p 添加端口映射

现象:
dockerfile存在EXPOSE 8080,但是docker run时未添加-p 端口映射,导致访问宿主机端口时访问不到。
解决方案:
在docker run中还是需要添加-p 端口映射,如:docker run -p 8080:8080 ...

1.4 执行docker run -p 8080:8080,出现iptables failed错误

现象:

docker: Error response from daemon: driver failed programming external connectivity on endpoint tomcat01 
(0a7c671209ed49c4e0c1dbff28f9d43e2155ba219bb609afc3892b4f4912d9b2):  
(iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9090 -j DNAT --to-destination \
172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)).

原因:

  • 当centos7 firewall 被清掉时, firewall的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。
  • 当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。

解决方案:
Linux 开启firewall 防火墙,并重启docker,systemctl restart docker

后续遇到问题继续补充~


http://www.kler.cn/a/226982.html

相关文章:

  • Open3d计算点云法向量,可视化(代码)
  • PyCharm常用快捷键和设置
  • Qt多语言翻译
  • SpringCloud-微服务项目架构
  • 机器学习算法之支持向量机(SVM)
  • 放空自己和终端的clear
  • python22-Python的字符串分割、连接方法
  • vue3 封装WebSocket(直接复制)
  • Hadoop3.x基础(3)- Yarn
  • 项目02《游戏-05-开发》Unity3D
  • [MFC] MFC消息机制的补充
  • 【web | CTF】攻防世界 easyupload
  • Android 13.0 原生SystemUI下拉通知栏每条通知默认展开
  • 【24.2.3笔记】C++ Primer 自学Day 20
  • THREE.JS动态场景开发实战【赛博朋克】
  • 点云从入门到精通技术详解100篇-堆叠零件的机器人三维视觉拾取
  • Unity引擎学习笔记之【射线检测操作】
  • C#(C Sharp)学习笔记_前言及Visual Studio Code配置C#运行环境【一】
  • 图书管理系统设计
  • 【Tomcat与网络5】再论Tomcat的工作过程与两种经典的设计模式