2016-07-28 10 views
2

問題docker-composeを使用してコンテナの固定IPアドレスを設定するにはどうすればよいですか?

私は、MySQLへの私のJavaプログラムを接続していますが、すべての時間は、MySQLコンテナのIPアドレスが変更に維持されます。それが変更された場合、私は接続のための私のJavaプログラムでそのIPアドレスを更新する必要があります(私は172.17.0.2をjavaプログラムで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(); 
      }  
     } 
    } 
} 

は私

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と呼ばれる自分の画像を使用しています。 (私はmysql-serverを含んでいるdockerfileを使ってmysqlrepイメージを構築しました。私は自分のデータベースuniversityを作成しました。これはstudent1という名前のテーブルでmy.sqlファイルを通して値が挿入されていました。

私は接続のための私のJavaプログラムで(私のクライアントにタスクを減らすbcz)を提供できるように、mysqlコンテナの固定IPアドレスを設定する必要があります。 どうすれば設定できますか?

注:

  • 私は7

  • ドッカ版Windows上でドッカーツールボックスを使用しています:

    • クライアントバージョン:1.11.1、OS /アーチ: windows/amd64

    • サーバのバージョン:1.11.2、OS /アーチ:のLinux/AMD64

  • ドッキングウィンドウ-コンバージョン:1.7.1

示唆してください...

を使用でき
+1

あなたは単純に 'm ysql'をIPの代わりにホスト名として使用しますか?それが同じドッカー作成ネットワーク上にある場合、それはうまくいくはずです。 – ldg

+0

代わりに名前を使用します。 IPリテラルの使用は、IPv4の私設ネットワークが標準化されておらず、いくつかのネットワークでDockerコンテナが以前に使用していたIP範囲を使用している可能性があるため、Dockerは異なるネットワークを使用する必要があります。 –

答えて

4

コンテナエイリアスmysqlは、Javaコンテナからの接続URLを形成するために

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

が処理されました。ありがとう –

+0

@ShashankG、もし_itが働いていたら、答えを受け入れてください。 – Opal

関連する問題