用上篇博客部署Java程序是ok的,不过Java日志打印在容器里, 不能满足原来ELK的日志搜集。
方法有2种:
1、在Docker容器内部加入日志收集工具,Filebeat或Logstash。
2、将打Docker内的日志打印到宿主机的目录。
本文用的第二种,下面再慢慢说思路,开始叻
先看项目不迷糊
1、首先 Dockerfile 里的 ENTRYPOINT配置Java日志输出无果
# 基础镜像使用Java
FROM java:8
LABEL name=shop-client-prod
LABEL version=v0.0.1
# 将jar包添加到容器中并更名为
# 注意:这个jar包文件名,请前方服务器 目录查看
COPY /shop-client/target/shop-client-1.0-SNAPSHOT.jar /usr/local/app/client.jar
# 容器暴露端口
EXPOSE 7071
# 这个暂且不用
# COPY target/lib /app/lib
ENTRYPOINT ["nohup","java","-Djava.security.egd=file:/dev/./urandom","-jar","-Dspring.profiles.active=master","/usr/local/app/shop-client.jar", ">client.out" , "&"]
改为执行shell脚本的方式,把启动Jar的指令拆出来
用上篇博客部署Java程序是ok的,不过Java日志打印在容器里,不能满足原来ELK的日志搜集。方法有2种:1、在Docker容器内部加入日志收集工具,Filebeat或Logstash。2、将打Docker内的日志打印到宿主机的目录。本文用的第二种,下面再慢慢说思路,开始叻先看项目不迷糊1、首先 Dockerfile 里的ENTRYPOINT配置Java日志输出无果# 基础镜像使用JavaFROM java:8LABEL name=shop-client-prod..
第三、写入指定容器在某时间段的日志
--将最近225分钟的日志写到file.txt文件
docker logs --since 225m 4261ce7f5c14 >>file.txt
第四、将file.tx
最近在工作时遇到一个问题,docker容器无法访问宿主机的redis,telent6379端口不通。
经排查发现,该服务器启用了防火墙,防火墙把6379的端口的访问授权给docker0网卡访问即可。
操作如下:
firewall-cmd –permanent –zone=trusted –change-interface=docker0
firewall-cmd –reload
补充知识:docker 启动mysql 容器出错Ports are not available: listen tcp 0.0.0.0:3306
错误截图如下
该错误是由于本地3306端口被占用,很可能是本地已经
一、什么是DockerFile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,有了Dockerfile,就可以很轻松通过docker bulid构建出自己的一个镜像。
二、DockerFile基础知识
每个保留关键字(指令)都是必须大写字母
执行从上到下顺序执行
#表示注释
每个指令都会创建提交一个新的镜像层,并提交!
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁...
VOLUME /tmp
ADD target/myapp.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
这个Dockerfile指定了基础镜像为OpenJDK 8,将项目打包成的jar文件复制到镜像中,并设置应用程序的入口点。
2. 构建Docker镜像
在命令行中进入到项目的根目录下,执行以下命令构建Docker镜像:
docker build -t myapp .
其中,myapp是你为镜像指定的名称。
3. 运行Docker容器
使用以下命令启动Docker容器:
docker run -p 8080:8080 myapp
其中,-p参数指定了容器端口和主机端口的映射关系,myapp是镜像的名称。
完成以上步骤后,你就可以在浏览器中访问http://localhost:8080来访问你的Java应用程序了。