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

<Border>
    <Border.Style>
        <Style TargetType="Border">
            <Setter Property="Background" Value="{x:Null}"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="Background" Value="White"/>
            <Setter Property="Effect">
                <Setter.Value>
                    <DropShadowEffect BlurRadius="20" Opacity="0.3" ShadowDepth="0" Color="#19334E"/>
                </Setter.Value>
            </Setter>
        </Style>
    </Border.Style>
    <Image Width="1080" Height="720"  Source="Imgs/01.png" />
</Border>

效果图如下:

带阴影效果的图片.png

背景

初学java,在学习spring时,一步一步安装视频教程进行配置,编码,在最后运行时,却无法访问controller中的请求,提示404。首页可正常访问,因controller中直接指向了一个静态jsp文件,经测试,直接修改url可以正常访问该页面,但经过controller访问却提示404。

HTTP状态 404 - 未找到
类型 状态报告

描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

Apache Tomcat/9.0.36

实现代码

1、pom.xml中已经正确配置了所需的dependency。
2、web.xml配置如下

    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3、UserController代码:

@Controller
public class UserController {

    @RequestMapping("/quick")
    public String save(){
        System.out.println("Controller save running ...");
        return "success.jsp";
    }
}

4、spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/mvc
              http://www.springframework.org/schema/mvc/spring-mvc.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd">

    <mvc:annotation-driven/>
    <context:component-scan base-package="info.hnbc.controller"/>
</beans>

分析

在反复测试后,发现根本就没有进入到Controller中,初步估计是根本就没有正确扫描到我们的controller,也就是在ioc容器进行解析我们的UserController时出错。各种折腾后发现在打包过程中,没有jar包,这也就导致ioc容器无法正常加载,从而导致UserController类没有加载打包给tomcat。具体原因还在研究,先介绍解决方法,后续再进行更新。

解决方案

打开Project Structure,选择Artifacts选项卡,在右侧,展开WEB-INF,新建一个名为lib的文件夹,
spring-mvc-study-1.png

之后将对应的库添加到lib下,重新运行即可解决。

使用IDEA过程中,碰到了这个菜鸟级别的问题,不过鉴于我第一次使用,还是记录下。

问题

IDEA新建了Web 应用,在配置了Tomcat后,直接运行没有问题,正常启动了,但是使用调试运行过程中,出现了无法打开Debugger port的问题。
QQ截图20200612151429.png

15:11    Error running 'Tomcat 9.0.36': Address localhost:8080 is already in use

15:11    Error running 'Tomcat 9.0.36': Unable to open debugger port (127.0.0.1:8123): java.net.SocketException "Interrupted function call: accept failed"

因为在左下角弹出了错误提示,只有上面的第二个错误信息,以为是那个8123的端口被占用,来来回回改了好几个都一样。后来点开了日志,才发现是8080被占用了。

解决方案

方案一

知道了问题就好办了,这个端口明显是tomcat配置的,打开tomcat安装目录,找到conf/server.xml。修改其中的<Connector port="9888" protocol="HTTP/1.1"将port端口修改一个未被占用的,保存后重新debug就可以了(还是不行,可以重启tomcat服务试试)。
修改端口号.png

方案二

查找占用了8080端口的进程,结束掉。该方法简单暴力,但最好确认占用端口的进程是否可以随意结束。

背景

最近想学习使用下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文本的编码,正是我们出现中文乱码的地方。