Docker部署项目更改Mysql端口号

article/2025/9/23 8:54:54

问题情景:

师弟在阿里云服务器上通过Tomcat部署java Web项目 程序端口8080 mysql端口3306

我通过Dokcer部署了前后端分离项目,为了避免端口冲突,服务器6612:3306映射端口。

本以为需要在java后端配置文件中更改url为:

 url: jdbc:mysql://localhost:6612/liquid?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai

但是更改之后重新部署到服务器,发现程序无法连接到mysql,抛出JDBC连接异常

重新更改url为

 url: jdbc:mysql://localhost:3306/liquid?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai

 发现可以正常访问 ,前后端程序一切正常。

为什么?

使用docker-compose创建启动容器时,将各个容器之间通过network连接起来,dokcer存在着多个组网, 使用docker inspect containerId 可以查看容器信息,查看其中的网络信息。查看容器属于哪个组网。当前项目的app和mysql虽然容器ip映射到了宿主机不同的ip。但是在network:sb-10-docker_default组网中可以通过容器端口实现互联。

 

 

docker network 的 bridge模式将容器ip映射到宿主机ip,可以通过外部端口进行访问。

 

docker-compose配置networks

默认网络

例如, 假设有一个项目,目录名myapp, docker-compose.yml 配置如下:

version: "3"
services:web:build: .ports:- "8000:8000"db:image: postgresports:- "8001:5432"

当执行 docker-compose up 的时候。会发生以下事情:

  1. 会创建一个名字是 myapp_default的网络(networks)
  2. web这个容器会加入到 myapp_default网络中,并且在网络中的名称为:web
  3. db这个容器会加入到 myapp_default网络中,并且在网络中的名称为:db

这里,每个容器都能通过应用名找到对方,例如,web容器可以通过 postgres://db:5432 来使用 Pg数据库。

上面例子还有一个注意点就是端口号,注意区分HOST_PORTCONTAINER_PORT,以上面的db为例:

  • 8001 是宿主机的端口
  • 5432(postgres的默认端口) 是容器的端口

当容器之间通讯时 , 是通过 CONTAINER_PORT 来连接的。

这里有宿主机端口,那么容器就可以通过宿主机端口和外部应用连接。

更新容器

对已经启动的容器,再执行 docker-compose up 的时候,旧容器删除,然后创建一个新的容器。

新容器会加入到网络,相同的网络名称,但容器IP是不一样的。已经连接的其他容器会自己重连到新的容器IP上。

自定义网络

可能通过一级配置networks来自定义网络,可以创建更复杂的网络选项和配置,也可以用来连接已经存在的网络(不是通过compose创建的)

每个service 配置下也可以指定networks配置,来指定一级配置的网络。

例如:

version: "3"
services:proxy:build: ./proxynetworks:- frontendapp:build: ./appnetworks:- frontend- backenddb:image: postgresnetworks:- backendnetworks:frontend:# Use a custom driverdriver: custom-driver-1backend:# Use a custom driver which takes special optionsdriver: custom-driver-2driver_opts:foo: "1"bar: "2"
  1. 一级配置networks 用来创建自定义的网络 。这里配置了两个frontendbackend . 且自定义了网络类型。
  2. 每一个serviceg下,proxy , app , db都定义了一下networks配置。
    1. proxy 只加入到 frontend网络。
    2. db 只加入到backend网络。
    3. app同时加入到 frontendbackend
    4. dbproxy不能通讯,因为不在一个网络中。
    5. app和两个都能通讯,因为app在两个网络中都有配置。
    6. dbproxy要通讯,只能通过app这个应用来连接。

配置默认网络

不指定网络时,默认的网络也是可以配置的。不配置的话,默认是使用:brige,也可以修改为其他 的。

version: "3"
services:web:build: .ports:- "8000:8000"db:image: postgresnetworks:default:# Use a custom driverdriver: custom-driver-1

指定一个已经存在的网络

多个容器,不在相同的配置中,也会有网络通讯的需求 。那么就可以使用公共的网络配置。

容器可以加入到已经存在的网络。

networks:default:external:name: my-pre-existing-network

这里name就是指定已经存在的网络名称。
 

 


http://chatgpt.dhexx.cn/article/6q823lra.shtml

相关文章

linux下查看mysql端口号和修改端口号方法

一、查看端口号 1、登录mysql [rootlocalhost ~]# mysql -uroot -p Enter password: 输入数据库密码; 2、使用show global variables like port; 命令查看端口号, 3307即为当前端口号。 二、修改mysql端口号 1、编辑/etc/my.cnf文件 [rootlocalhost ~]# vi /…

linux下修改mysql端口号

1.登录mysql mysql -u root -p 2.查看当前端口号 show global variables like port; 3.修改端口 vim /etc/my.cnf 4. 增加或修改端口参数,然后保存退出 port3308 5.重启mysql service mysqld restart 6.查看mysql状态 systemctl status mysqld 7.阿里云上安全…

如何修改mysql占用的端口号_修改mysql端口号(mysql的端口号)

修改mysql端口号(mysql的端口号) 2020-05-07 22:12:00 共10个回答 如何查看mysql默认端口号和修改端口号 登录mysql,使用命令showglobalvariableslikeport;查看端口号修改端口在配置文件my.ini,修改后重新启动.[mysqld]port3506 如何修改修改mysql默认端口号3306 在配置文件my.…

虚拟机查看MySQL端口号

先进入MySQL mysql -hhadoop102 -uroot -p 再查看端口号 show variables like ‘port’;

mysql怎么看端口号_mysql端口号(怎么查看mysql的端口号)

mysql端口号(怎么查看mysql的端口号) 2020-05-07 21:54:58 共10个回答 如何查看mysql的端口号 1使用命令showglobalvariableslikeport;查看端口号2修改端口,编辑/etc/my.cnf文件,早期版本有可能是my.conf文件名,增加端口参数,并且设定端口,注意该端口未被使用,保存退出.总结:注…

mysql默认端口号_什么是MySQL默认端口号?

mysql默认端口号 MySQL is very popular database in the opensource community. While developing applications or connecting MySQL database we need to specify the MySQL port implicitly or explicitly. In this tutorial we will learn MySQL default port number and …

任意进制之间的转换(Java使用自带方法)

做国赛的题需要实现数字k进制之间的转换&#xff08;2<k<36&#xff09;上网搜了实现的方法&#xff1a; 博客的地址&#xff1a;就是这里&#xff01; public class BinaryTest {//设置字符数组//可以添加任意不重复字符&#xff0c;提高能转换的进制的上限static char…

java中的进制转换及转换函数

Java的进制转换 进制转换原理 十进制 转 二进制&#xff1a; 原理: 对十进制数进行除 2 运算取余。 6 --> 110 二进制 转 十进制 原理: 二进制 乘以 2 的n次幂 的过程 110 ->0*20 1*21 1 * 22 0 2 46 0 0 1 1 0 1 0 1 128 64 32 16 8 4 2 1 53 当 8个bi…

Java实现任意进制转换拓展进制转换计算器

JAVA实现蓝桥杯基础练习十六进制转换八进制-----------拓展进制转换计算器 这个题目我浏览了大量的道友的文章发现十分麻烦&#xff0c;但仍然从其中收益菲薄&#xff0c;所以在这里分享一下我认为最好的代码 import java.math.BigInteger; import java.util.Scanner;public c…

java实现十进制数转换成二进制数

十进制数转换成二进制 import java.util.Scanner; public class Textwile { public static void main(String[] args) { Scanner scanner new Scanner(System.in); System.out.println(“请输入一个十进制的整数&#xff1a;”); int num scanner.nextInt(); String nums …

Java算法学习:java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制)

java进制转换&#xff08;十进制转八进制&#xff0c;十进制转二进制&#xff0c;十六进制转八进制&#xff09; 这几天在复习C语言的数据结构栈和队列那一章的时候&#xff0c;看到利用栈的特性FILO实现的进制转换十分简洁 想起了java中实现栈的操作十分方便&#xff08;不用…

Java 3种方法实现进制转换

由其他进制转换为十进制比较简单&#xff0c;下面着重谈一谈十进制如何化为其他进制。 1.使用Java带有的方法Integer&#xff0c;最简单粗暴了&#xff0c;代码如下 //使用java提供的方法//但仅局限于比较常用的二进制、八进制、十六进制public static String trans1(int num…

Java实现十进制与二进制互相转换

目录 前言十进制转二进制正整数转二进制小数转换成二进制代码实现 二进制转十进制代码实现 BigInteger概念运用 前言 Java有哪些工具类可以实现十进制与二进制之前的转换呢&#xff1f;欲知详情&#xff0c;请看下文分解。 十进制转二进制 正整数转二进制 除2取余&#xff0c;…

Java 中的进制转换

前言 所谓进制转换&#xff0c;就是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”和“位权”所构成。其中基数是指进位计数制中所采用的数码的个数&#xff0c;逢 n 进 1 中的 n 就是基数。而位权则指的是进位制中每一个固定位置所对应的单位制&am…

Java十进制转换为二进制

Java十进制到二进制转换的3种不同方法。 1. Integer.toString&#xff08;&#xff09;方法 我们可以使用Integer类的toString&#xff08;&#xff09;方法将十进制数转换为二进制数。此方法有两个参数&#xff0c;第一个参数是十进制数&#xff0c;第二个参数是我们要转换的基…

Java 菜鸟入门 | 常用进制转换

前言 所谓进制转换&#xff0c;就是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”和“位权”所构成。其中基数是指进位计数制中所采用的数码的个数&#xff0c;逢 n 进 1 中的 n 就是基数。而位权则指的是进位制中每一个固定位置所对应的单位制&am…

Java进制转换(二进制、八进制、十进制、十六进制)

在Java编程中&#xff0c;经常需要进行不同进制之间的转换&#xff0c;包括二进制、八进制、十进制和十六进制。本篇博文将详细介绍如何在Java中实现这些进制之间的转换。 目录 一、十进制与其他进制转换1. 十进制转二进制2. 十进制转八进制3. 十进制转十六进制 二、其他进制与…

java进制转换方法

一、十进制向二、八、十六进制的转换 方法一&#xff1a; Integer.toBinaryString(i)表示十进制转为二进制 Integer.toOctalString(i)表示十进制转为八进制 Integer.toHexString(i)表示十进制转为十六进制 public static void main(String[] args) {String num1 Integer.toBi…

Quartz定时任务框架(一):概述和Job、JobDetail详解

文章目录 Quartz定时任务框架核心概念Hello World 入门 深入学习原理概述Job和JobDetailJobDataMapJob实例Job的数据状态和并发Job的其它特性 Quartz定时任务框架 核心概念 JobJobDetailTriggerScheduler Job: 既然是定时任务&#xff0c;任务任务对吧&#xff0c;job就是你…

struts2+quartz定时任务

最近有需求要写一个定时任务 目的是更新一些员工/人员与部门之间的关系 项目用的是struts2 当我加了spring的jar包之后写了一个定时任务 项目经理不让用spring 就修改一下 这次贴个全的 下面是任务类 package com.timetask.action; import java.io.BufferedWriter; import…