RocketChat / Rocket.Chat

The communications platform that puts data protection first.
https://rocket.chat/
Other
39.29k stars 10.07k forks source link

arm64 Docker images #27305

Open jaonoctus opened 1 year ago

jaonoctus commented 1 year ago

Any plans on publishing arm64 images here?

jaonoctus commented 1 year ago

I tried to change this line from the Dockerfile and then build it.

- RUN ARCH="x64" \
+ RUN ARCH="arm64" \
$ dpkg --print-architecture
arm64

$ DOCKER_BUILDKIT=1 docker build -t jaonoctus/rocket.chat:v5.2 .
[+] Building 1.9s (10/10) FINISHED                                                                                                                                           => [internal] load build definition from Dockerfile                                                                                                                   0.1s
 => => transferring dockerfile: 3.75kB                                                                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                                                      0.1s
 => => transferring context: 2B                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/debian:buster-slim                                                                                                  1.7s
 => [1/6] FROM docker.io/library/debian:buster-slim@sha256:5dbce817ee72802025a38a388237b0ea576aa164bc90b7102b73aa42fef4d713                                            0.0s
 => => resolve docker.io/library/debian:buster-slim@sha256:5dbce817ee72802025a38a388237b0ea576aa164bc90b7102b73aa42fef4d713                                            0.0s
 => CACHED [2/6] RUN ARCH="arm64"   && set -eux   && apt-get update && apt-get install -y --no-install-recommends ca-certificates curl wget gnupg dirmngr xz-utils     0.0s
 => CACHED [3/6] RUN groupadd -r rocketchat   && useradd -r -g rocketchat rocketchat   && mkdir -p /app/uploads   && chown rocketchat:rocketchat /app/uploads          0.0s
 => CACHED [4/6] WORKDIR /app                                                                                                                                          0.0s
 => CACHED [5/6] RUN set -eux   && apt-get update   && apt-get install -y --no-install-recommends fontconfig   && aptMark="$(apt-mark showmanual)"   && apt-get insta  0.0s
 => CACHED [6/6] WORKDIR /app/bundle                                                                                                                                   0.0s
 => exporting to image                                                                                                                                                 0.0s
 => => exporting layers                                                                                                                                                0.0s
 => => writing image sha256:9ddac1c4513034fd25aecf2b95148e003811444396589fedd426866de83df598                                                                           0.0s
 => => naming to docker.io/jaonoctus/rocket.chat:v5.2

But when I tried to run the service, I got this error:

Error: /app/bundle/programs/server/npm/node_modules/meteor/accounts-password/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node: cannot open shared object file: No such file or directory
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:1144:18)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Module.Mp.load (/app/bundle/programs/server/runtime.js:46:33)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:101:18)
    at Object.<anonymous> (/app/bundle/programs/server/npm/node_modules/meteor/accounts-password/node_modules/bcrypt/bcrypt.js:6:16)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Module.Mp._compile (/app/bundle/programs/server/runtime.js:99:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Module.Mp.load (/app/bundle/programs/server/runtime.js:46:33)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:101:18)
    at npmRequire (/app/bundle/programs/server/npm-require.js:133:12) {
  code: 'ERR_DLOPEN_FAILED'
}
jaonoctus commented 1 year ago
spkane commented 9 months ago

@KevLehman Are there any plans to apply the updates that would allow RocketChat (and related containers) to build on the ARM64 platform?

Running this under QEMU emulation is very slow.

hibobmaster commented 7 months ago

I get it work in arm64 device, here is my dockerfile. Solution got from: https://github.com/RocketChat/server-snap/blob/de72de0a128d73fc7be8dee0a93057add22a10ef You can also use hibobmaster/rocketchat-arm if you don't want to build it yourself.

bhkj9999 commented 7 months ago

I get it work in arm64 device, here is my dockerfile. Solution got from: https://github.com/RocketChat/server-snap/blob/de72de0a128d73fc7be8dee0a93057add22a10ef You can also use hibobmaster/rocketchat-arm if you don't want to build it yourself.

Hi thanks for your share, I tried your docker build on my raspberry pi.

rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat          | /app/bundle/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/promise_server.js:218
rocketchat          |       throw error;
rocketchat          |       ^
rocketchat          | 
rocketchat          | MongoServerSelectionError: getaddrinfo ENOTFOUND mongodb
rocketchat          |     at Timeout._onTimeout (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/sdam/topology.js:292:38)
rocketchat          |     at listOnTimeout (internal/timers.js:557:17)
rocketchat          |     at processTimers (internal/timers.js:500:7)
rocketchat          |  => awaited here:
rocketchat          |     at Function.Promise.await (/app/bundle/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/promise_server.js:56:12)
rocketchat          |     at new MongoConnection (packages/mongo/mongo_driver.js:213:11)
rocketchat          |     at new MongoInternals.RemoteCollectionDriver (packages/mongo/remote_collection_driver.js:9:16)
rocketchat          |     at Object.<anonymous> (packages/mongo/remote_collection_driver.js:66:18)
rocketchat          |     at Object.defaultRemoteCollectionDriver (packages/underscore.js:784:19)
rocketchat          |     at new Collection (packages/mongo/collection.js:127:40)
rocketchat          |     at AccountsServer._initializeCollection (packages/accounts-base/accounts_common.js:98:20)
rocketchat          |     at new AccountsCommon (packages/accounts-base/accounts_common.js:46:23)
rocketchat          |     at new AccountsServer (packages/accounts-base/accounts_server.js:30:5)
rocketchat          |     at packages/accounts-base/server_main.js:7:12
rocketchat          |     at module (packages/accounts-base/server_main.js:19:31)
rocketchat          |     at fileEvaluate (packages/modules-runtime.js:336:7)
rocketchat          |     at Module.require (packages/modules-runtime.js:238:14)
rocketchat          |     at require (packages/modules-runtime.js:258:21)
rocketchat          |     at /app/bundle/programs/server/packages/accounts-base.js:2219:15
rocketchat          |     at /app/bundle/programs/server/packages/accounts-base.js:2226:3 {
rocketchat          |   reason: TopologyDescription {
rocketchat          |     type: 'Single',
rocketchat          |     servers: Map(1) {
rocketchat          |       'mongodb:27017' => ServerDescription {
rocketchat          |         address: 'mongodb:27017',
rocketchat          |         type: 'Unknown',
rocketchat          |         hosts: [],
rocketchat          |         passives: [],
rocketchat          |         arbiters: [],
rocketchat          |         tags: {},
rocketchat          |         minWireVersion: 0,
rocketchat          |         maxWireVersion: 0,
rocketchat          |         roundTripTime: -1,
rocketchat          |         lastUpdateTime: 2481598,
rocketchat          |         lastWriteDate: 0,
rocketchat          |         error: MongoNetworkError: getaddrinfo ENOTFOUND mongodb
rocketchat          |             at connectionFailureError (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/cmap/connect.js:387:20)
rocketchat          |             at Socket.<anonymous> (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/cmap/connect.js:310:22)
rocketchat          |             at Object.onceWrapper (events.js:520:26)
rocketchat          |             at Socket.emit (events.js:400:28)
rocketchat          |             at emitErrorNT (internal/streams/destroy.js:106:8)
rocketchat          |             at emitErrorCloseNT (internal/streams/destroy.js:74:3)
rocketchat          |             at processTicksAndRejections (internal/process/task_queues.js:82:21) {
rocketchat          |           cause: Error: getaddrinfo ENOTFOUND mongodb
rocketchat          |               at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
rocketchat          |             errno: -3008,
rocketchat          |             code: 'ENOTFOUND',
rocketchat          |             syscall: 'getaddrinfo',
rocketchat          |             hostname: 'mongodb'
rocketchat          |           },
rocketchat          |           [Symbol(errorLabels)]: Set(1) { 'ResetPool' }
rocketchat          |         },
rocketchat          |         topologyVersion: null,
rocketchat          |         setName: null,
rocketchat          |         setVersion: null,
rocketchat          |         electionId: null,
rocketchat          |         logicalSessionTimeoutMinutes: null,
rocketchat          |         primary: null,
rocketchat          |         me: null,
rocketchat          |         '$clusterTime': null
rocketchat          |       }
rocketchat          |     },
rocketchat          |     stale: false,
rocketchat          |     compatible: true,
rocketchat          |     heartbeatFrequencyMS: 10000,
rocketchat          |     localThresholdMS: 15,
rocketchat          |     setName: 'rs0',
rocketchat          |     maxElectionId: null,
rocketchat          |     maxSetVersion: null,
rocketchat          |     commonWireVersion: 0,
rocketchat          |     logicalSessionTimeoutMinutes: null
rocketchat          |   },
rocketchat          |   code: undefined,
rocketchat          |   [Symbol(errorLabels)]: Set(0) {}
rocketchat          | }
rocketchat-mongodb exited with code 132
rocketchat exited with code 0
rocketchat-mongodb exited with code 132
hibobmaster commented 7 months ago

I get it work in arm64 device, here is my dockerfile. Solution got from: https://github.com/RocketChat/server-snap/blob/de72de0a128d73fc7be8dee0a93057add22a10ef You can also use hibobmaster/rocketchat-arm if you don't want to build it yourself.

Hi thanks for your share, I tried your docker build on my raspberry pi.

rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat-mongodb exited with code 132
rocketchat          | /app/bundle/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/promise_server.js:218
rocketchat          |       throw error;
rocketchat          |       ^
rocketchat          | 
rocketchat          | MongoServerSelectionError: getaddrinfo ENOTFOUND mongodb
rocketchat          |     at Timeout._onTimeout (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/sdam/topology.js:292:38)
rocketchat          |     at listOnTimeout (internal/timers.js:557:17)
rocketchat          |     at processTimers (internal/timers.js:500:7)
rocketchat          |  => awaited here:
rocketchat          |     at Function.Promise.await (/app/bundle/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/promise_server.js:56:12)
rocketchat          |     at new MongoConnection (packages/mongo/mongo_driver.js:213:11)
rocketchat          |     at new MongoInternals.RemoteCollectionDriver (packages/mongo/remote_collection_driver.js:9:16)
rocketchat          |     at Object.<anonymous> (packages/mongo/remote_collection_driver.js:66:18)
rocketchat          |     at Object.defaultRemoteCollectionDriver (packages/underscore.js:784:19)
rocketchat          |     at new Collection (packages/mongo/collection.js:127:40)
rocketchat          |     at AccountsServer._initializeCollection (packages/accounts-base/accounts_common.js:98:20)
rocketchat          |     at new AccountsCommon (packages/accounts-base/accounts_common.js:46:23)
rocketchat          |     at new AccountsServer (packages/accounts-base/accounts_server.js:30:5)
rocketchat          |     at packages/accounts-base/server_main.js:7:12
rocketchat          |     at module (packages/accounts-base/server_main.js:19:31)
rocketchat          |     at fileEvaluate (packages/modules-runtime.js:336:7)
rocketchat          |     at Module.require (packages/modules-runtime.js:238:14)
rocketchat          |     at require (packages/modules-runtime.js:258:21)
rocketchat          |     at /app/bundle/programs/server/packages/accounts-base.js:2219:15
rocketchat          |     at /app/bundle/programs/server/packages/accounts-base.js:2226:3 {
rocketchat          |   reason: TopologyDescription {
rocketchat          |     type: 'Single',
rocketchat          |     servers: Map(1) {
rocketchat          |       'mongodb:27017' => ServerDescription {
rocketchat          |         address: 'mongodb:27017',
rocketchat          |         type: 'Unknown',
rocketchat          |         hosts: [],
rocketchat          |         passives: [],
rocketchat          |         arbiters: [],
rocketchat          |         tags: {},
rocketchat          |         minWireVersion: 0,
rocketchat          |         maxWireVersion: 0,
rocketchat          |         roundTripTime: -1,
rocketchat          |         lastUpdateTime: 2481598,
rocketchat          |         lastWriteDate: 0,
rocketchat          |         error: MongoNetworkError: getaddrinfo ENOTFOUND mongodb
rocketchat          |             at connectionFailureError (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/cmap/connect.js:387:20)
rocketchat          |             at Socket.<anonymous> (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/cmap/connect.js:310:22)
rocketchat          |             at Object.onceWrapper (events.js:520:26)
rocketchat          |             at Socket.emit (events.js:400:28)
rocketchat          |             at emitErrorNT (internal/streams/destroy.js:106:8)
rocketchat          |             at emitErrorCloseNT (internal/streams/destroy.js:74:3)
rocketchat          |             at processTicksAndRejections (internal/process/task_queues.js:82:21) {
rocketchat          |           cause: Error: getaddrinfo ENOTFOUND mongodb
rocketchat          |               at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
rocketchat          |             errno: -3008,
rocketchat          |             code: 'ENOTFOUND',
rocketchat          |             syscall: 'getaddrinfo',
rocketchat          |             hostname: 'mongodb'
rocketchat          |           },
rocketchat          |           [Symbol(errorLabels)]: Set(1) { 'ResetPool' }
rocketchat          |         },
rocketchat          |         topologyVersion: null,
rocketchat          |         setName: null,
rocketchat          |         setVersion: null,
rocketchat          |         electionId: null,
rocketchat          |         logicalSessionTimeoutMinutes: null,
rocketchat          |         primary: null,
rocketchat          |         me: null,
rocketchat          |         '$clusterTime': null
rocketchat          |       }
rocketchat          |     },
rocketchat          |     stale: false,
rocketchat          |     compatible: true,
rocketchat          |     heartbeatFrequencyMS: 10000,
rocketchat          |     localThresholdMS: 15,
rocketchat          |     setName: 'rs0',
rocketchat          |     maxElectionId: null,
rocketchat          |     maxSetVersion: null,
rocketchat          |     commonWireVersion: 0,
rocketchat          |     logicalSessionTimeoutMinutes: null
rocketchat          |   },
rocketchat          |   code: undefined,
rocketchat          |   [Symbol(errorLabels)]: Set(0) {}
rocketchat          | }
rocketchat-mongodb exited with code 132
rocketchat exited with code 0
rocketchat-mongodb exited with code 132

The error is related to your database configuration. Here's a example: https://github.com/hibobmaster/useful-notes/blob/main/rocketchat/compose.yaml

bhkj9999 commented 7 months ago

thanks, I dropped the MongoDB version to 4.4, and it works