Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MyBatis installed in Docker container fails with ERROR: Could not create SqlRunner. Cause: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection[Pipeline] #100

Closed
svscorp opened this issue Nov 14, 2017 · 7 comments

Comments

@svscorp
Copy link

svscorp commented Nov 14, 2017

Hi team,

I am facing an issue with my MyBatis 3.3.2. It can't execute migration, and there is not more information that below.

MyBatis is installed in a Docker image and executed inside a container. DB Host and Port is accessible both from host and Docker container.

Not even sure where to go with further troubleshooting.

DB_DRIVER           : oracle.jdbc.OracleDriver
DB_CONNECTION_URL : jdbc:oracle:thin:@database-host:1521/sid

- Check / Wait for Database connection (10 tries)
   > Waiting for database connection
    Try: 0
  Database connection Ok

- Run Mybatis
OpenJDK 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
------------------------------------------------------------------------
-- MyBatis Migrations - status
------------------------------------------------------------------------
ID             Applied At          Description
================================================================================
------------------------------------------------------------------------
-- MyBatis Migrations FAILURE
-- Total time: 60s
-- Finished at: Tue Nov 14 14:14:49 GMT 2017
-- Final Memory: 20M/479M
------------------------------------------------------------------------

ERROR: Could not create SqlRunner. Cause: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection[Pipeline] }
@h3adache
Copy link
Member

Can you share a simple docker project? Usually when you get this it is either

  • url is wrong
  • name resolution isn't working (database-host in your case. try ip instead).
  • db isn't running
  • ports are blocked

@chb0github
Copy link
Contributor

@svscorp Your docker setup, not migrations, is nearly certainly the culprit.

@svscorp
Copy link
Author

svscorp commented Nov 15, 2017

Hi @h3adache @chb0github Thank you for quick reply. I consider it's in the docker environment as well, spent some time trying to figure out what is the issue. But it's a simple Docker container, with "as is" mybatis installation.

wrapper code (migrate.sh):

DB_DRIVER="oracle.jdbc.OracleDriver"
DB_CONNECTION_URL="jdbc:oracle:thin:@$DB_HOST:$DB_PORT/$DB_NAME"

echo "DB_DRIVER			: $DB_DRIVER"
echo "DB_CONNECTION_URL : $DB_CONNECTION_URL"
echo 

# Create mybatis properties file on fly
#--------------------------------
cat <<CONF > /migration/environments/development.properties
time_zone=GMT+0:00

driver=$DB_DRIVER
url=$DB_CONNECTION_URL
username=$DB_USER
password=$DB_PASSWORD

script_char_set=UTF-8
send_full_script=false
delimiter=;
full_line_delimiter=false
auto_commit=false
changelog=CHANGELOG

CONF

/opt/mybatis-migrations/bin/migrate "$@"

image code

FROM centos:latest

MAINTAINER Ilia Shakitko <ilia.shakitko@accenture.com>

# download mybatis to /tmp/mybatis-migrations-3.3.2-SNAPSHOT.zip, install JAVA, ...

RUN unzip /tmp/mybatis-migrations-3.3.2-SNAPSHOT.zip -d /opt/ && \
	rm -f /tmp/mybatis-migrations-3.3.2-SNAPSHOT.zip && \
	chmod +x /opt/mybatis-migrations-3.3.2-SNAPSHOT/bin/migrate && \
	ln -s /opt/mybatis-migrations-3.3.2-SNAPSHOT /opt/mybatis-migrations

RUN mkdir -p /migration/drivers && \
	mkdir -p /migration/environments && \
	mkdir -p /migration/scripts


ADD ojdbc7.jar /migration/drivers/ojdbc7.jar
ADD migrate.sh /opt/migrate.sh
RUN chmod +x /opt/migrate.sh

WORKDIR /migration

ENTRYPOINT ["/opt/migrate.sh"]

Saying upfront, if I go inside the container, I can see that development.properties file generated properly (looks like):

time_zone=GMT+0:00

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@ipaddress:1521/databasesid
username=someUser
password=strongPassword123

script_char_set=UTF-8
send_full_script=false
delimiter=;
full_line_delimiter=false
auto_commit=false
ignore_warnings=false
changelog=CHANGELOG

I can telnet from the container to that host or ip (port 1521).

@svscorp
Copy link
Author

svscorp commented Nov 15, 2017

url is wrong

It's validated on mybatis in non-container installation

name resolution isn't working (database-host in your case. try ip instead).

IP the same

db isn't running

It's running, I can connect to it using telnet

ports are blocked

Same as above.

--trace output

[root@e20ee5c50419 migration]# telnet database-ip-or-host 1521
Trying database-ip-or-host...
Connected to database-ip-or-host.
Escape character is '^]'.
^[
^]
telnet>
quit

[root@e20ee5c50419 migration]# /opt/mybatis-migrations/bin/migrate status --trace



Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
------------------------------------------------------------------------
-- MyBatis Migrations - status
------------------------------------------------------------------------
ID             Applied At          Description
================================================================================
------------------------------------------------------------------------
-- MyBatis Migrations FAILURE
-- Total time: 60s
-- Finished at: Wed Nov 15 13:00:42 UTC 2017
-- Final Memory: 20M/479M
------------------------------------------------------------------------

ERROR: Could not create SqlRunner. Cause: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connectionorg.apache.ibatis.migration.MigrationException: Could not create SqlRunner. Cause: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
        at org.apache.ibatis.migration.operations.DatabaseOperation.getSqlRunner(DatabaseOperation.java:87)
        at org.apache.ibatis.migration.operations.DatabaseOperation.changelogExists(DatabaseOperation.java:72)
        at org.apache.ibatis.migration.operations.StatusOperation.operate(StatusOperation.java:42)
        at org.apache.ibatis.migration.commands.StatusCommand.execute(StatusCommand.java:27)
        at org.apache.ibatis.migration.CommandLine.runCommand(CommandLine.java:62)
        at org.apache.ibatis.migration.CommandLine.execute(CommandLine.java:39)
        at org.apache.ibatis.migration.Migrator.main(Migrator.java:17)
Caused by: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
        at org.apache.ibatis.datasource.unpooled.UnpooledDataSource$DriverProxy.connect(UnpooledDataSource.java:249)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at java.sql.DriverManager.getConnection(DriverManager.java:208)
        at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:201)
        at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:196)
        at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.getConnection(UnpooledDataSource.java:93)
        at org.apache.ibatis.migration.DataSourceConnectionProvider.getConnection(DataSourceConnectionProvider.java:31)
        at org.apache.ibatis.migration.operations.DatabaseOperation.getSqlRunner(DatabaseOperation.java:85)
        ... 6 more
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
        at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:445)
        at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:464)
        at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:594)
        at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:214)
        at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
        at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
        ... 18 more
Caused by: java.net.SocketTimeoutException: connect timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:162)
        at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
        at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:411)
        ... 24 more

@h3adache
Copy link
Member

Sorry just to double check you are sure databasesid is the right name of the db?
Can you create a sample docker?

@svscorp
Copy link
Author

svscorp commented Nov 16, 2017

I did some troubleshooting. It has nothing to do with Docker. I installed it on the VM itself to check narrow down the issue.

Strange.

@svscorp
Copy link
Author

svscorp commented Nov 18, 2017

As this is not related to MyBatis most probably, closing the issue.

@svscorp svscorp closed this as completed Nov 18, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants