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

标签 docker docker-compose dockerfile

问题

我正在将我的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-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

我在 docker compose 内的 mysql 服务中使用我自己的名为 mysqlrep 的镜像。(我使用包含 mysql-server 的 dockerfile 构建了 mysqlrep 镜像,并且我创建了我的数据库大学,名为 Student1 的表,通过 my.database 插入值。 SQL 文件)。

现在我必须为 mysql 容器设置固定的 IP 地址,以便我可以在我的 java 程序中提供它进行连接(bcz 它减少了我的客户端的任务)。 我该如何设置?

注意:

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

  • docker 版本:

    • 客户端版本:1.11.1,操作系统/Arch:windows/amd64

    • 服务器版本:1.11.2,操作系统/Arch:linux/amd64

  • docker-compose 版本:1.7.1

请提出建议...

最佳答案

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

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

关于docker - 如何使用docker-compose为容器设置固定IP地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38637207/

相关文章:

python - 如何在链接的 docker 容器上运行命令?

javascript - 如何构建 React 应用程序的 docker 镜像?

不同文件夹的 Dockerfile RUN 行为不同

java - 如何在gradle java自定义插件中添加源集

docker - 我在 docker 上执行 npm install 时出现问题

apache-spark - 在 docker 堆栈之间共享卷?

php - 如何在同一容器中运行cron和Web应用程序?

python - docker 。无此文件或目录

macos - 无法在 M1 芯片组上构建 docker compose

selenium - 如何在docker-compose.yml中配置Selenium Grid(最大 session 数)