#293  How to Use External Database for a Docker Image
Closed
Khose opened 3 years ago

The guide for using external database is for host deployment, but how to use a external database when using docker image ? I try to stop onedev in an container and get below output

root@985ee171dda2:/opt/onedev#  /opt/onedev/bin/server.sh stop
Removed stale pid file: /opt/onedev/bin/../status/onedev.pid
OneDev is not running.

But it seems the onedev is still running.

root@985ee171dda2:/opt/onedev# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 12:37 ?        00:00:00 /bin/bash /root/bin/entrypoint.sh
root          76       1  0 12:38 ?        00:00:00 /opt/onedev/boot/wrapper-linux-x86-64 /opt/onedev/conf/wrapper.conf
root          88      76 39 12:38 ?        00:00:23 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Djava.awt.headless=true -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMEroot          98       0  0 12:38 pts/0    00:00:00 /bin/bash
root         415      98  0 12:39 pts/0    00:00:00 ps -ef

And I try to backup database, but an error occureed.

root@985ee171dda2:/opt/onedev# /opt/onedev/bin/backup-db.sh db.b
Running OneDev Backup Database...
--> Wrapper Started as Console
Java Service Wrapper Standard Edition 64-bit 3.5.44
  Copyright (C) 1999-2020 Tanuki Software, Ltd. All Rights Reserved.
    http://wrapper.tanukisoftware.com
  Licensed to OneDev for Service Wrapping

Launching a JVM...
WrapperManager: Initializing...
INFO  - Launching application from '/opt/onedev'...
INFO  - Cleaning temp directory...
INFO  - Initializing dependency injection container...
INFO  - Starting plugin manager...
ERROR - Error booting application
java.lang.RuntimeException: java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@9c516f56[file =/opt/onedev/sampledb/onedev.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2021-05-27 12:39:29 heartbeat - read: -9860 ms.
        at io.onedev.commons.utils.ExceptionUtils.unchecked(ExceptionUtils.java:36) ~[io.onedev.commons-utils-2.0.8.jar:na]
        at io.onedev.server.persistence.DefaultPersistManager.getConnection(DefaultPersistManager.java:226) ~[io.onedev.server-core-4.4.0.jar:na]
        at io.onedev.server.persistence.DefaultPersistManager.readDbDataVersion(DefaultPersistManager.java:247) ~[io.onedev.server-core-4.4.0.jar:na]
        at io.onedev.server.persistence.DefaultPersistManager.checkDataVersion(DefaultPersistManager.java:142) ~[io.onedev.server-core-4.4.0.jar:na]
        at io.onedev.server.maintenance.BackupDatabase.start(BackupDatabase.java:60) ~[io.onedev.server-core-4.4.0.jar:na]
        at io.onedev.server.OneDev.start(OneDev.java:111) ~[io.onedev.server-core-4.4.0.jar:na]
        at io.onedev.commons.launcher.loader.DefaultPluginManager.start(DefaultPluginManager.java:44) ~[io.onedev.commons-launcher-loader-2.0.8.jar:na]
        at io.onedev.commons.launcher.loader.AppLoader.start(AppLoader.java:74) ~[io.onedev.commons-launcher-loader-2.0.8.jar:na]
        at io.onedev.commons.launcher.bootstrap.Bootstrap.main(Bootstrap.java:174) ~[io.onedev.commons-launcher-bootstrap-2.0.8.jar:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_292]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_292]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_292]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_292]
        at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:349) [wrapper.jar:3.5.44]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_292]
Caused by: java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@9c516f56[file =/opt/onedev/sampledb/onedev.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2021-05-27 12:39:29 heartbeat - read: -9860 ms.
        at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at io.onedev.server.persistence.DefaultPersistManager.getConnection(DefaultPersistManager.java:224) ~[io.onedev.server-core-4.4.0.jar:na]
        ... 13 common frames omitted
Caused by: org.hsqldb.HsqlException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@9c516f56[file =/opt/onedev/sampledb/onedev.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2021-05-27 12:39:29 heartbeat - read: -9860 ms.
        at org.hsqldb.error.Error.error(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.error.Error.error(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.persist.LockFile.newLockFileLock(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.persist.Logger.acquireLock(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.persist.Logger.open(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.Database.reopen(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.Database.open(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.DatabaseManager.getDatabase(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        at org.hsqldb.DatabaseManager.newSession(Unknown Source) ~[org.hsqldb.hsqldb-2.4.0.jar:2.4.0]
        ... 17 common frames omitted
<-- Wrapper Stopped

So could you give me a hand?

Robin Shen commented 3 years ago

Database switching is only supported for bare-metal installation mode. Docker mode does not support that.

Robin Shen commented 3 years ago

Also in docker mode various utilities in locally mounted directory are not supposed to be used by end user as that directory is only for data storage purpose. One should start/stop/upgrade OneDev in the docker way. To get database backup, please login to GUI and navigate to Administration / System Maintenance / Database Backup to do the job.

Khose commented 3 years ago

Hi thank you for your reply.

I find that I can use external databse in docker by follow steps:

  1. Run onedev docker image and stop it without do any install action.
  2. Modify hibernate configurations in docker mount volumes.
  3. Create database entry in external database system.
  4. Restart onedev docker and install the system.

How about this ? Is there some exceptions in these?

Robin Shen commented 3 years ago

This should be working fine, although it complicates the process. The docker mode is all about simplicity after all.

Robin Shen changed state to 'Closed' 3 years ago
Previous Value Current Value
Open
Closed
issue 1 of 1
Type
Bug
Priority
Normal
Assignee
Affected Versions
Not Found
Issue Votes (0)
Watchers (3)
Reference
onedev/server#293
Please wait...
Page is in error, reload to recover