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.
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:
Run onedev docker image and stop it without do any install action.
Modify hibernate configurations in docker mount volumes.
Create database entry in external database system.
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.
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
But it seems the onedev is still running.
And I try to backup database, but an error occureed.
So could you give me a hand?