如何使用docker-compose为容器设置固定的IP地址?

问题

我正在连接我的Java程序到MySQL,但每一次的MySQL容器的IP地址将不断变化。 如果它改变了,我必须在我的java程序中更新这个ip地址进行连接(我在java程序中提到了172.17.0.2作为mysql的容器ip)。

下面是我简单的jdbc java程序

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作曲

  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服务里面的docker撰写。(我使用dockerfilebuild立了mysqlrep镜像,包含mysql-server,我创build了我的Database大学,名为student1的表,通过my.sql文件插入了这个值) 。

现在我必须为MySQL容器设置固定的IP地址,以便我可以在我的Java程序中提供连接(bcz它将任务减less到我的客户端)。 我怎么设置它?

注意:

  • 我在Windows 7上使用Docker工具箱

  • docker版本:

    • 客户端版本:1.11.1,Os / Arch:windows / amd64

    • 服务器版本:1.11.2,Os / Arch:linux / amd64

  • docker合成版本:1.7.1

请build议…

你可以使用容器别名mysql来形成java容器的连接url

 DriverManager.getConnection("jdbc:mysql://mysql:3306/university", ...