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

后续遇到问题继续补充~

相关推荐

  1. docker compose部署项目—记录

    2024-02-04 17:54:02       16 阅读
  2. mySQL记录

    2024-02-04 17:54:02       44 阅读
  3. Pinia 记录

    2024-02-04 17:54:02       34 阅读
  4. golang记录

    2024-02-04 17:54:02       20 阅读
  5. ubuntu上安装docker-compose记录

    2024-02-04 17:54:02       23 阅读
  6. 深度学习记录

    2024-02-04 17:54:02       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-04 17:54:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-04 17:54:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-04 17:54:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-04 17:54:02       20 阅读

热门阅读

  1. windows下docker的使用

    2024-02-04 17:54:02       30 阅读
  2. 如何选择Centos的替代者

    2024-02-04 17:54:02       30 阅读
  3. docker内的资源隔离的linux实现

    2024-02-04 17:54:02       32 阅读
  4. Docker 常用命令详细介绍

    2024-02-04 17:54:02       30 阅读
  5. LeetCode 每日一题 2024/1/29-2024/2/4

    2024-02-04 17:54:02       29 阅读
  6. C#面:简述什么叫应用程序域

    2024-02-04 17:54:02       31 阅读
  7. 蓝桥杯经典 年号字串

    2024-02-04 17:54:02       30 阅读
  8. python常用的工具类介绍

    2024-02-04 17:54:02       31 阅读