@@ -57,6 +57,9 @@ import { dockerRegistrysAuth, dockerRegistryAuth } from '../../@types/OceanNode.
5757import { EncryptMethod } from '../../@types/fileObject.js'
5858import { ZeroAddress } from 'ethers'
5959
60+ const C2D_CONTAINER_UID = 1000
61+ const C2D_CONTAINER_GID = 1000
62+
6063const trivyImage = 'aquasec/trivy:0.69.3' // Use pinned versions for safety
6164
6265export class C2DEngineDocker extends C2DEngine {
@@ -1469,7 +1472,7 @@ export class C2DEngineDocker extends C2DEngine {
14691472 if ( ! jobRes [ 0 ] . isRunning ) return null
14701473 try {
14711474 const job = jobRes [ 0 ]
1472- const container = await this . docker . getContainer ( job . jobId + '-algoritm' )
1475+ const container = this . docker . getContainer ( job . jobId + '-algoritm' )
14731476 const details = await container . inspect ( )
14741477 if ( details . State . Running === false ) return null
14751478 return await container . logs ( {
@@ -1728,6 +1731,8 @@ export class C2DEngineDocker extends C2DEngine {
17281731 // create the container
17291732 const mountVols : any = { '/data' : { } }
17301733 const hostConfig : HostConfig = {
1734+ // limit number of Pids container can spawn, to avoid flooding
1735+ PidsLimit : 512 ,
17311736 Mounts : [
17321737 {
17331738 Type : 'volume' ,
@@ -1769,9 +1774,10 @@ export class C2DEngineDocker extends C2DEngine {
17691774 AttachStdin : false ,
17701775 AttachStdout : true ,
17711776 AttachStderr : true ,
1772- Tty : true ,
1777+ Tty : false ,
17731778 OpenStdin : false ,
17741779 StdinOnce : false ,
1780+ User : `${ C2D_CONTAINER_UID } :${ C2D_CONTAINER_GID } ` ,
17751781 Volumes : mountVols ,
17761782 HostConfig : hostConfig
17771783 }
@@ -1786,8 +1792,10 @@ export class C2DEngineDocker extends C2DEngine {
17861792 containerInfo . HostConfig . Devices = advancedConfig . Devices
17871793 if ( advancedConfig . GroupAdd )
17881794 containerInfo . HostConfig . GroupAdd = advancedConfig . GroupAdd
1789- if ( advancedConfig . SecurityOpt )
1790- containerInfo . HostConfig . SecurityOpt = advancedConfig . SecurityOpt
1795+ containerInfo . HostConfig . SecurityOpt = [
1796+ 'no-new-privileges' ,
1797+ ...( advancedConfig . SecurityOpt ?? [ ] )
1798+ ]
17911799 if ( advancedConfig . Binds ) containerInfo . HostConfig . Binds = advancedConfig . Binds
17921800 containerInfo . HostConfig . CapDrop = [ 'ALL' ]
17931801 for ( const cap of advancedConfig . CapDrop ?? [ ] ) {
@@ -1847,7 +1855,7 @@ export class C2DEngineDocker extends C2DEngine {
18471855 let container
18481856 let details
18491857 try {
1850- container = await this . docker . getContainer ( job . jobId + '-algoritm' )
1858+ container = this . docker . getContainer ( job . jobId + '-algoritm' )
18511859 details = await container . inspect ( )
18521860 } catch ( e ) {
18531861 console . error (
@@ -1952,7 +1960,7 @@ export class C2DEngineDocker extends C2DEngine {
19521960 job . statusText = C2DStatusText . JobSettle
19531961 let container
19541962 try {
1955- container = await this . docker . getContainer ( job . jobId + '-algoritm' )
1963+ container = this . docker . getContainer ( job . jobId + '-algoritm' )
19561964 } catch ( e ) {
19571965 CORE_LOGGER . debug ( 'Could not retrieve container: ' + e . message )
19581966 job . isRunning = false
@@ -2149,7 +2157,7 @@ export class C2DEngineDocker extends C2DEngine {
21492157 this . releaseCpus ( job . jobId )
21502158
21512159 try {
2152- const container = await this . docker . getContainer ( job . jobId + '-algoritm' )
2160+ const container = this . docker . getContainer ( job . jobId + '-algoritm' )
21532161 if ( container ) {
21542162 if ( job . status !== C2DStatusNumber . AlgorithmFailed ) {
21552163 writeFileSync (
@@ -2875,7 +2883,7 @@ export class C2DEngineDocker extends C2DEngine {
28752883
28762884 if ( existsSync ( destination ) ) {
28772885 // now, upload it to the container
2878- const container = await this . docker . getContainer ( job . jobId + '-algoritm' )
2886+ const container = this . docker . getContainer ( job . jobId + '-algoritm' )
28792887
28802888 try {
28812889 // await container2.putArchive(destination, {
@@ -2963,7 +2971,7 @@ export class C2DEngineDocker extends C2DEngine {
29632971 }
29642972
29652973 // delete output folders
2966- await this . deleteOutputFolder ( job )
2974+ this . deleteOutputFolder ( job )
29672975 // delete the job
29682976 await this . db . deleteJob ( job . jobId )
29692977 return true
0 commit comments