問題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
示唆してください...
を使用でき
あなたは単純に 'm ysql'をIPの代わりにホスト名として使用しますか?それが同じドッカー作成ネットワーク上にある場合、それはうまくいくはずです。 – ldg
代わりに名前を使用します。 IPリテラルの使用は、IPv4の私設ネットワークが標準化されておらず、いくつかのネットワークでDockerコンテナが以前に使用していたIP範囲を使用している可能性があるため、Dockerは異なるネットワークを使用する必要があります。 –