簡體   English   中英

從 docker 容器內運行的應用程序連接到本地運行的數據庫

[英]Connect to database running in local from application running inside docker container

我是 docker 的新手,試圖從 docker 內部運行的應用程序連接在本地運行的 oracle 數據庫。

出現以下錯誤:

IO 錯誤:網絡適配器無法建立連接

我瀏覽到我們可以提取 oracle 映像並在 docker 容器中運行,但我想連接本地運行的數據庫。

有人可以指導我如何從application inside docker container連接在local windows machine上運行的 oracle 數據庫。

獲取SessionFactory實例的代碼:

private SessionFactory getSessionFactory() {
    SessionFactory sessionFactory = null;
    if (sessionFactory == null) {
        try {
            Configuration configuration = new Configuration();
            // Hibernate settings equivalent to hibernate.cfg.xml's
            // properties
            System.out.println("SessionFactory getting called");
            Properties settings = new Properties();
            settings.put(Environment.DRIVER, "oracle.jdbc.driver.OracleDriver");
            settings.put(Environment.URL, "jdbc:oracle:thin:@localhost:1521:xxxxx");
            settings.put(Environment.USER, "xxxxx");
            settings.put(Environment.PASS, "xxxx");
            settings.put(Environment.DIALECT, "org.hibernate.dialect.Oracle12cDialect");
            settings.put(Environment.SHOW_SQL, "true");
            settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread");
            settings.put(Environment.C3P0_MIN_SIZE, 10);
            settings.put(Environment.C3P0_MAX_SIZE, 100);
            settings.put(Environment.C3P0_TIMEOUT, 300);
            configuration.setProperties(settings);
            configuration.addAnnotatedClass(SecretQuestionsEnity.class).addAnnotatedClass(CustomerEntity.class)
                    .addAnnotatedClass(AddressEntity.class).addAnnotatedClass(SecretAnswersEntity.class)
                    .addAnnotatedClass(BranchEntity.class).addAnnotatedClass(AccountEntity.class)
                    .addAnnotatedClass(CurrentACEntity.class).addAnnotatedClass(SavingsACEntity.class)
                    .addAnnotatedClass(TransactionEntity.class).addAnnotatedClass(PayeeEntity.class);
            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                    .applySettings(configuration.getProperties()).build();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return sessionFactory;
}

錯誤:

2020-07-24 16:32:09 WARN  o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 17002, SQLState: 08006
2020-07-24 16:32:10 ERROR o.h.e.jdbc.spi.SqlExceptionHelper - IO Error: The Network Adapter could not establish the connection
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)

如果您在 docker 容器內運行應用程序,則localhost指的是container而不是您的本地 windows 機器

settings.put(Environment.URL, "jdbc:oracle:thin:@localhost:1521:xxxxx");

Either you can give your windows machine IP address instead of localhost in the URL string or you can read it from environment variable by passing it in docker run command.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM