如何使用 docker-compose 为容器设置固定 ip 地址?
How to set fixed ip address for container using docker-compose?
问题
我正在将我的 java 程序连接到 mysql 但每次 mysql 容器的 IP 地址都会不断变化。如果它发生变化,我必须在我的 java 程序中更新该 ip 地址以进行连接。(我在 java 程序中提到 172.17.0.2 作为 mysql 容器 ip)。
下面是我简单的jdbcjava程序
import java.sql.*;
import java.sql.Connection;
import java.lang.*;
public class Sample
{
public static void main(String[] args)
{
Connection conn = null;
Statement stmt = null;
String sql= "select * from student1;"; //insert into student1 values(2,'kalam');
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e)
{
System.out.println(e);
}
try{
conn = DriverManager.getConnection("jdbc:mysql://172.17.0.2:3306/university", "root", "root");
stmt = conn.createStatement();
//stmt.execute(sql);
ResultSet rs= stmt.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getInt(1)+" "+rs.getString(2));
}
System.out.println("value inserted");
}
catch(Exception e)
{
System.out.println(e+"driver man");
}
finally
{
try{
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.close();
}
catch(SQLException e)
{
System.out.println(" conn problem");
e.printStackTrace();
}
}
}
}
下面是我的docker-compose
mysql:
image: mysqlrep
container_name: mysqlcompose
environment:
- MYSQL_ROOT_PASSWORD= root
ports:
- "0.0.0.0:3306:3306"
command: bash -c "/etc/init.d/mysql start && cd /var/lib/mysql && mysql -u root && sleep 10"
java:
image: java:9
container_name: javacompose
links:
- mysql
command: bash -c "javac /compose/Sample.java && java -cp "./compose:./compose/mysql-connector-java-5.1.5-bin.jar" Sample"
volumes:
- ~/compose:/compose
我在 mysql 服务中使用我自己的名为 mysqlrep 的图像 docker 撰写。(我使用 docker 文件构建了 mysqlrep 图像其中包含- mysql-服务器,我创建了我的数据库大学,table 称为 student1,通过 my.sql 文件向其插入值)。
现在我必须为 mysql 容器设置固定的 IP 地址,以便我可以在我的 java 程序中提供它用于连接(因为它减少了我的客户端的任务).
我该如何设置?
注:
我在 windows 7
上使用 Docker 工具箱
docker版本:
客户端版本:1.11.1,Os/Arch:windows/amd64
服务器版本:1.11.2,Os/Arch:linux/amd64
docker-撰写版本:1.7.1
请推荐...
您可以使用容器别名 mysql
从 java 容器
形成连接 url
DriverManager.getConnection("jdbc:mysql://mysql:3306/university", ...
问题
我正在将我的 java 程序连接到 mysql 但每次 mysql 容器的 IP 地址都会不断变化。如果它发生变化,我必须在我的 java 程序中更新该 ip 地址以进行连接。(我在 java 程序中提到 172.17.0.2 作为 mysql 容器 ip)。
下面是我简单的jdbcjava程序
import java.sql.*;
import java.sql.Connection;
import java.lang.*;
public class Sample
{
public static void main(String[] args)
{
Connection conn = null;
Statement stmt = null;
String sql= "select * from student1;"; //insert into student1 values(2,'kalam');
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e)
{
System.out.println(e);
}
try{
conn = DriverManager.getConnection("jdbc:mysql://172.17.0.2:3306/university", "root", "root");
stmt = conn.createStatement();
//stmt.execute(sql);
ResultSet rs= stmt.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getInt(1)+" "+rs.getString(2));
}
System.out.println("value inserted");
}
catch(Exception e)
{
System.out.println(e+"driver man");
}
finally
{
try{
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.close();
}
catch(SQLException e)
{
System.out.println(" conn problem");
e.printStackTrace();
}
}
}
}
下面是我的docker-compose
mysql:
image: mysqlrep
container_name: mysqlcompose
environment:
- MYSQL_ROOT_PASSWORD= root
ports:
- "0.0.0.0:3306:3306"
command: bash -c "/etc/init.d/mysql start && cd /var/lib/mysql && mysql -u root && sleep 10"
java:
image: java:9
container_name: javacompose
links:
- mysql
command: bash -c "javac /compose/Sample.java && java -cp "./compose:./compose/mysql-connector-java-5.1.5-bin.jar" Sample"
volumes:
- ~/compose:/compose
我在 mysql 服务中使用我自己的名为 mysqlrep 的图像 docker 撰写。(我使用 docker 文件构建了 mysqlrep 图像其中包含- mysql-服务器,我创建了我的数据库大学,table 称为 student1,通过 my.sql 文件向其插入值)。
现在我必须为 mysql 容器设置固定的 IP 地址,以便我可以在我的 java 程序中提供它用于连接(因为它减少了我的客户端的任务). 我该如何设置?
注:
我在 windows 7
上使用 Docker 工具箱
docker版本:
客户端版本:1.11.1,Os/Arch:windows/amd64
服务器版本:1.11.2,Os/Arch:linux/amd64
docker-撰写版本:1.7.1
请推荐...
您可以使用容器别名 mysql
从 java 容器
DriverManager.getConnection("jdbc:mysql://mysql:3306/university", ...