标签 解决方案 下的文章

说明

看标题很绕,那是因为我目前也不知道怎么处理,但是误打误撞找到了一个临时解决方案,为了防止以后复现此类问题无法解决,这里简单记录一下。

背景

springboot开发的项目、本地使用nexus搭建了maven库,使用gitlab做代码管理,同时配合jenkins进行自动部署。
整体流程就是提交代码到gitlab后,触发jenkins进行编译并部署到docker容器。开发过程中使用了一个第三方的jar包,手动上传到了nexus库中。

问题

清理了jenkins中的.m2缓存的包后,再次在jenkins中构建会提示如下错误:

Downloaded from maven-releases: http://我的nexusip/nexus/repository/maven-releases/e-iceblue/spire.presentation.free/3.9.0/spire.presentation.free-3.9.0.jar (37 MB at 64 MB/s)
[INFO] 
...
Waiting for Jenkins to finish collecting data
[ERROR] Failed to execute goal on project data-maintain: Could not resolve dependencies for project 我的项目:jar:0.0.1-SNAPSHOT: Could not find artifact e-iceblue:spire.presentation.free:jar:3.9.0 in central (https://repo.maven.apache.org/maven2) -> [Help 1]
[ERROR] 

这里的spire.presentation.free-3.9.0.jar便是我使用的第三方jar包,很明显前面已经从我的nexus库中下载了,但是后面又去repo.maven.apache.org中去查找没找的报错了。

解决方案

这个问题困扰了我好久,至今也没找到方案,不过阴差阳错间,找到了个临时方法。过程如下:

  1. pom文件中原本是这样的
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <repositories>
        <repository>
            <id>central</id>
            <url>http://我的nexus地址/nexus/repository/maven-releases</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>http://我的nexus地址/nexus/repository/maven-releases</url>
        </pluginRepository>
    </pluginRepositories>

    <modelVersion>4.0.0</modelVersion>
...
  1. 提交,并自动部署。会报上述错误。
  2. 将pom修改为:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>
    <modelVersion>4.0.0</modelVersion>
...
  1. 提交,并触发自动部署。仍会报错。
  2. 修改pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 删除了这些配置-->
    <modelVersion>4.0.0</modelVersion>
  1. 提交,并jenkins进行构建。
  2. 竟然好了。

总结

先这样吧,后面找到了具体原因,在更新。

错误提示: COPY failed: stat /var/lib/docker/tmp/docker-builder...no such file or directory

具体错误如下:

Step 4/5 : COPY /bin/Release/netcoreapp3.1/publish .
COPY failed: stat /var/lib/docker/tmp/docker-builder255452545/bin/Release/netcoreapp3.1/publish: no such file or directory

解决方案

看到此类错误,需要排查文件或文件夹名称是否有写错,如果一切正确,还需要查看是否配置了.dockerignore文件,并且要COPY的文件夹是否添加到了Ignore列表中,如果有,删除即可。

Docker容器做端口映射报错

docker: Error response from daemon: driver failed programming external connectivity on endpoint ....

解决方法

docker服务启动时定义的自定义链DOCKER被清除
重启即可systemctl restart docker


connect: permission denied

docker: docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock ....

解决方法

修改 var/run/docker.sock的权限属性为666或777可解决。但,每次docker重启后,该权限将会重置,需要重新再次配置。


查看容器的日志

docker logs -f -t --tail 200 auth-server

以配置文件方式、守护态 运行redis ,同时,重启docker会自动启动

docker run -p 6379:6379 --name redis --restart always -v /root/redis/redis01/conf/redis.conf:/etc/redis/redis.conf -v /root/redis/redis01/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

Centos获取ip,无法使用ifconfig

ifconfig这个命令是在net-tools.x86_64这个包里,需要安装该工具,命令:yum install net-tools.x86_64

Docker 进入容器命令

docker exec -it 44fc0f0582d9 /bin/bash

查看容器ip地址:

[root@localhost ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' 1d3d739a0b3b
172.17.0.5
[root@localhost ~]# 

容器和宿主机之间文件拷贝

1、从容器里面拷文件到宿主机?

命令

docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 

示例:

docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

2、从宿主机拷文件到容器里面

命令

docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

示例:

docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js

查看Linux版本信息

cat /etc/issue

COPY failed: stat /var/lib/docker/tmp/docker-builder...no such file or directory

错误如下:

Step 4/5 : COPY /bin/Release/netcoreapp3.1/publish .
COPY failed: stat /var/lib/docker/tmp/docker-builder255452545/bin/Release/netcoreapp3.1/publish: no such file or directory

看到此类错误,需要排查文件或文件夹名称是否有写错,如果一切正确,还需要查看是否配置了.dockerignore文件,并且要COPY的文件夹是否添加到了Ignore列表中,如果有,删除即可。

容器无法访问外网问题

默认构建镜像时,使用的是bridge模式,需访问外网,可以指定网络为host

docker build -t ideology-usermanager . --network=host

Docker下Redis常用操作

进入容器:

docker exec -it redis /bin/bash

进入redis操作命令:

redis-cli -h 127.0.0.1 -p 6379

查看所有key

keys *

清空数据

flushall 所有数据库

flushdb 当前库

Docker-compose 操作

  • docker-compose up 用于部署一个 Compose 应用。 ...
  • docker-compose stop 停止Compose 应用相关的所有容器,...
  • docker-compose rm 用于删除已停止的 Compose 应用。 ...
  • docker-compose restart 重启已停止的 Compose 应用。 ...
  • docker-compose ps 用于列出 Compose 应用中的各个容器。 ...

-f参数,指定yml文件
docker-compose -f docker-compose-dev.yml up

背景

最近想学习使用下Java,下载了IDEA,配置了tomcat后,发现输出的日志信息,竟然是中文乱码,如下图所示,起初以为是IDEA的编码问题,Setting里设置了各种编码和语言,并没有起作用。
中文乱码.png

经过

网上搜了相关文章,但是试了几个并没有起作用。其中大部分是修改IDEA中Setting里面相关设置。

后来突然意识到,这应该是Tomcat输出的日志信息本来就是乱码造成的,于是有了如下解决办法。

解决

在Tomcat安装目录下,找到conf/logging.properties文件,打开后,找到 java.util.logging.ConsoleHandler.encoding的配置项,将其值修改为GBK即可。
修改前:
java.util.logging.ConsoleHandler.encoding = UTF-8

修改后:
java.util.logging.ConsoleHandler.encoding = GBK

中文乱码解决.png

解释

根据字面意思,很容易猜出来,改配置项是设置的tomcat控制台输出的log文本的编码,正是我们出现中文乱码的地方。