Docker部署启动错误,需要手动进入Docker的容器里,启动程序,排查错误
#docker-compose build --no-cache //重新创建容器,不管有没有
#docker-compose up
#docker-compose up -d //后台启动并运行容器,如果没有会先执行build,如果有只启动
#docker-compose build --no-cache && docker-compose up -d
asp.net core
#docker run -it --rm --entrypoint /bin/bash tlz.netcore.ssodemo:1.0
进入docker容器里面,启动运行asp.net core的程序
#dotnet TLZ.COM.NetCore.View.SSODemo.dll 手动在容器里运行程序,观察运行时的错误
redis.Docker.json ,redis容器名称通过docker ps 查看 name字段得到,文章下面有
{
"Redis": {
"AutoStart": true,
"DbIndex": 1,
"Password": "315360007",
"AllowAdmin": true,
"AbortConnect": false,
"ReadWriteHost": [ "trusting_euclid:6379" ],
"ReadOnlyHost": [],
"MaxWritePoolSize": 65000,
"MaxReadPoolSize": 65000,
"ConnectTimeout": 1000,
"DistributedCacheEnabled": true,
"ApplicationDiscriminator": "6A9C3ED7EAC624E4FF988388627D723CB53C9542863F0B286A6482709BA7E141",
"DataProtectionKey": "AspNetCore-DataProtection-Redis-Keys"
}
}
再次进入Docker容器里面,查看hosts文件,和命令行方式运行dotnet程序并且指定运行时的环境变量
#docker run -it --rm --entrypoint /bin/bash --link trusting_euclid tlz.netcore.ssodemo:1.0 ( trusting_euclid 是 redis容器的NAMES)
#cat /etc/hosts
#dotnet TLZ.COM.NetCore.View.SSODemo.dll --environment=Docker
#docker run -it --rm -p 27777:7777 --link trusting_euclid --network bridge dotnetcore/easyui /bin/bash
#dotnet TLZ.COM.NetCore.View.EasyUIDemo.dll --environment=Docker
ASP.NET Core 发布之后通过命令控制监听地址和环境变量
java & springboot
#docker run -it --rm --entrypoint /bin/bash tb.com.sbmsm.demo:1.0
#java -jar tb.easyuidemo.jar --spring.profiles.active=docker 手动在容器里运行程序,观察运行时的错误
找不到设置的数据库连接地址。之前是192.168.0.82,现在改成heuristic_stallman,因为同一个宿主机,不同的docker容器之间没法互相通信。
查看hosts文件,发现没有heuristic_stallman
cat /etc/hosts
换一种方式运行,增加heuristic_stallman,同时设置访问端口
docker run -it --rm --entrypoint /bin/bash -p 18090:8090 --link heuristic_stallman tb.com.sbmsm.demo:1.0
查看hosts文件,发现有了heuristic_stallman
cat /etc/hosts
这时候在运行java的程序就可以了,同时由于运行容器的时候指定了访问端口,通过浏览器也可以访问到了。
#java -jar tb.easyuidemo.jar --spring.profiles.active=docker 手动在容器里运行程序,观察运行时的错误
#同一台宿主机里面的多个docker容器,运行一个docker容器的java程序,连另一个运行docker容器里面的mysql,默认是连接不通的。
#原因为本机内部的多个docker容器在运行互相连接时,没有通过本机的防火墙,默认是无法互联的。
修改程序数据库连接字符串,写上mysql的docker运行时的名字
直接通过命令的方式运行进入docker指定的镜像容器里面,查看容器里hosts的信息,注意:现在用的是openjdk8的镜像启动的,并且指定link和workdir
#docker run --rm --workdir /app --link heuristic_stallman -it openjdk:8 /bin/bash
#cat /etc/hosts 手动在容器里运行程序,查看容器里面hosts的信息
用下面的方式,运行之后程序就可以通了,但是docker里面并没有将这个java程序打包进去。继续往下
查看linxu里面需要运行的java程序位置。
#ll /data/web/springboot/deploy
直接通过命令的方式运行进入docker指定的镜像容器里面
注意:现在用的是openjdk的镜像启动的,并且使用数据卷的方式,将外部java程序的目录进行映射到容器里,运行java的jar程序是在linux系统里面,并不是在docker容器里面的jar程序,继续指定link,同时指定端口后,运行之后可以通过浏览器访问了。
#docker run --rm -v /data/web/springboot/deploy:/app --workdir /app --link heuristic_stallman -p 18090:8090 openjdk:8 java -jar tb.easyuidemo.jar --spring.profiles.active=docker
如何实现打包的方式,让docker里面的java程序能够访问另外一个docker里面mysql的数据库呢?
首先需要了解当前宿主机里面docker的网络使用情况,发现每一个netcore和java的程序,被docker之后都会创建一个独立名称的network。
#docker network ls 查看docker的全部网络(了解docker当前的网络情况)
查看所有docker镜像,包括未运行的镜像
docker ps -a (查看所有docker镜像,包括未运行的)
查看一个net core的docker容器的network名称是什么,通过容器ID的方式查看
docker inspect 5d727bb33b58 (netcore的容器ID)
查找mysql运行时用到的network名称,首选需要找到mysql的docker容器使用的ID和NAMES
#docker ps 查找mysql运行时docker容器的ID和NAMES
查看mysql运行时docker容器用到的network名称是bridge
#docker inspect df687bae1933 (mysql的容器ID)查看mysql运行时docker容器用到的网络名称是bridge
这时候就知道为什么之前的docker程序镜像,不管是net还是java都无法访问当前宿主机的mysql的docker容器了,是因为他们的network名称不同导致的。
docker-compose.xml 修改配置文件,增加external_links(设置NAMES的值)和指定network_mode(设置Networks的值)
version: '3.4'
services:
tb.com.sbmsm.demo:
image: tb.com.sbmsm.demo:1.0
build:
context: ./tb.com.sbmsm.demo
dockerfile: ./tb.view.sbmsm.easyuidemo/Dockerfile
ports:
- 18090:8090
external_links:
- heuristic_stallman:heuristic_stallman
network_mode: bridge
Dockerfile(原来的,不需要修改)
FROM openjdk:8 AS base
WORKDIR /app
EXPOSE 8090 FROM maven:3-jdk-8 AS build
WORKDIR /app
COPY . .
RUN mvn clean install -Dmaven.test.skip=true -f tb.common/pom.xml -s settings.xml; \
mvn clean install -Dmaven.test.skip=true -f tb.db/pom.xml -s settings.xml; \
mvn clean package -Dmaven.test.skip=true -f tb.view.sbmsm.easyuidemo/pom.xml -s settings.xml FROM base AS final
WORKDIR /app
COPY --from=build /app/tb.view.sbmsm.easyuidemo/target/tb.easyuidemo.jar .
ENTRYPOINT ["java", "-jar", "tb.easyuidemo.jar", "--spring.profiles.active=docker"]
使用docker-compose命令重新打包
#docker-compose build (重新创建docker镜像)
#docker-compose up (前台方式重新运行,查看是否还有错误信息)
查看docker容器(包含没有启动的java容器)
#docker ps -a 查看容器(包含没有启动的java容器)
查看docker容器为java的信息,看到link和networks都已经设置到docker容器里面了。
#docker inspect 95967302d33d(java的容器ID)查看docker容器里的信息
重新运行docker容器,这时java的docker容器网络就通了,进去看一下/etc/hosts文件里面的内容
#docker start 95967302d33d (运行已经创建好的docker容器)
#docker exec -it 95967302d33d /bin/bash(进入运行的docker容器)查看hosts文件
#cat /etc/hosts
这时容器里面就已经设置好了hosts文件和网络信息。由于这次是通过已经打包好java程序的docker容器运行的,所以,端口信息也已经有了,直接通过浏览器就可以访问了。
Docker部署启动错误,需要手动进入Docker的容器里,启动程序,排查错误的更多相关文章
- 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...
- 2. Docker部署tomcat, nginx, redis,及docker私有仓库
1. 部署tomcat 1.1 下载tomcat docker pull tomcat:7-jre8 1.2 部署容器 docker run -di --name=tomcat -p 8 ...
- Docker部署Hadoop集群
Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...
- Windows 下 docker 部署 gitlab ci
一.安装 1. 安装 docker Docker下载 注意:Windows 10 家庭版获取 之前的版本不能直接安装 Docker ,而是需要去安装 Docker Toolbox 我这里安装的是 Do ...
- docker 部署spring.boot项目【一】(引用外部配置文件)
上一篇随笔,nginx是启动运行在容器内,spring.boot的web项目是运行在宿主内,这一篇的目的,是把web项目也制作成镜像,然后在容器里启动. 文件目录结构如下: 主要文件结构说明:(1)b ...
- docker(部署常见应用):docker部署redis
上节回顾:docker(部署常见应用):docker部署mysql docker部署redis:4.0 # 下载镜像 docker pull redis:4.0 # 查看下载镜像 docker ima ...
- 在华为云ECS上手工通过Docker部署tomcat
本文介绍了如何在华为云上ECS上手工通过Docker部署tomcat,并提供了Docker常用操作 一.环境准备 ECS:操作系统版本: CentOS Linux release 7.6.181 ...
- 使用 Docker 部署 Spring Boot 项目
Docker 介绍 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器解决方案. Docker 将应用程序与该程序的依赖,打包在一个文件里面 ...
- 手把手教你 Docker部署可视化工具Grafana
一.Grafana的简单介绍 Grafana是开源的.炫酷的可视化监控.分析利器,无论您的数据在哪里,或者它所处的数据库是什么类型,您都可以将它与Grafana精美地结合在一起.它还有丰富的套件供您选 ...
随机推荐
- 【剑指offer】59 - I. 滑动窗口的最大值
剑指 Offer 59 - I. 滑动窗口的最大值 知识点:队列:滑动窗口:单调 题目描述 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值. 示例 输入: nums = [ ...
- CSS Grid 布局(Grid Layout)完全指南 #flight.Archives003
Title/ CSS Grid 布局(Grid Layout)完全指南 #flight.Archives003 序 : 写完这篇文章后,我准备一直做下去了,包括flight的各个分区,也看到前方的路. ...
- WPF MVVM模式下路由事件
一,路由事件下三种路由策略: 1 冒泡:由事件源向上传递一直到根元素.2直接:只有事件源才有机会响应事件.3隧道:从元素树的根部调用事件处理程序并依次向下深入直到事件源.一般情况下,WPF提供的输入事 ...
- shell趣味实验——图形
目录 一.直线 二.矩形 2.1.镂空矩形 三.直角三角形 3.1.倒直角三角形 3.2.反直角三角形 3.3.等腰三角形 3.4.倒等腰三角形 3.5.菱形 四.平行四边形 五.梯形 5.1.等腰梯 ...
- PTA数据结构习题集
https://blog.csdn.net/qq_43733499/category_8956159.html https://www.cnblogs.com/nonlinearthink/tag/% ...
- Elasticsearch之深入理解
@ 目录 ES应用场景 ES应用场景举例 应用场景思考 ES和其他数据库对比 ES架构 Gateway Lucene 数据处理 发现机制与脚本 Transport REST full API ES中集 ...
- 【网络编程】TCPIP-7-域名与网络地址
目录 前言 7. 域名与网络地址 7.1 IP 7.2 域名 7.3 DNS 7.4 IP地址与域名之间的转换 7.4.1 利用域名获取IP地址 7.4.2 利用IP地址获取域名 7.4.3 升级版的 ...
- SQL 练习23
查询男生.女生人数 SELECT Ssex,COUNT(Ssex) 人数 from Student GROUP BY Ssex
- NOIP 模拟 6 辣鸡
题解 难得啊,本来能 \(AC\) 的一道题,注释没删,挂了五分,难受 此题暴力很好想,就是直接 \(n^2\) 枚举不同的矩阵组合,记录块内答案和跨块的答案 出题人不会告诉你,这题只要输出块内答案就 ...
- Mybatis-Plus入门学习笔记(一)
本文内容 了解Mybatis-Plus 整合Mybatis-Plus 1.了解Mybatis-plus 1.1.Mybatis-Plus介绍 MyBatis-Plus(简称 MP)是一个 MyBati ...