Open 0x416e746f6e opened 1 year ago
Does checking out commit e0bb8e3ab900e94f882365fb68a9dbcd7ea07872
work for you? (git checkout e0bb8e3ab900e94f882365fb68a9dbcd7ea07872
)
Nope. Checking out v7.7.5
(and v7.0.0
for that matter as well) does not help.
There is more that one issue, though, from what I can see:
npx leerna ...
fails to install something under root
user => but it works if I create ganache
user and su - ganache
.3.5.3
while at least 3.6.0
is expected) => if I bump base image to node:14.21.3-buster
it seems to help.npm run build
demands INFURA_KEY
env var to be set.. What if I don't have one?For p.p. 1, 2 I can push a PR. But what do I do about p.3? Can I just feed it a nonsense key (e.g. 01234567890123456789012345678901
)?
Looks like the instructions are out missing some instructions. You'll need to pass a build arg, INFURA_KEY
for now (--build-arg
flag to the docker build
command), as the Docker file doesn't currently import the CREATE_BROKEN_BUILD
flag (which must be set to "I WILL NOT PUBLISH THIS"
if you don't provide an INFURA_KEY).
If you don't provide a valid INFURA_KEY forking via ganache --fork mainnet
won't work. You can provide a nonsense key to just make it build, if you want (it must be 32 hex characters, IIRC)
.
Building is working as expected in CI and on my machine (Linux). I'm unsure what could be going wrong for you, do you have other changes? Have you ever run npm
as root on your host machine?
It fails on my local Mac (M1). If fails on remote ubuntu 20.04.5 LTS (x86_64). Here's the output of the above command (on ubuntu machine, on top of v7.7.5
):
Status: Downloaded newer image for node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484743858f
---> 7528ad312b56
Step 2/16 : WORKDIR /app
---> Running in 73a0b3c0ea8d
Removing intermediate container 73a0b3c0ea8d
---> ac9fdc6a8b1e
Step 3/16 : COPY . .
---> 050a3d268586
Step 4/16 : RUN npm run clean
---> Running in a99aa799e07d
> root@ clean /app
> npm run tsc.clean && npx lerna clean -y && npx shx rm -rf node_modules
> root@ tsc.clean /app
> npx lerna exec -- npx shx rm -rf lib dist typings
npm ERR! cb() never called!
npm ERR! This is an error with npm itself. Please report this error at:
npm ERR! <https://npm.community>
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-03-02T17_18_14_723Z-debug.log
Install for [ 'lerna@latest' ] failed with code 1
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! root@ tsc.clean: `npx lerna exec -- npx shx rm -rf lib dist typings`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the root@ tsc.clean script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-03-02T17_18_14_793Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! root@ clean: `npm run tsc.clean && npx lerna clean -y && npx shx rm -rf node_modules`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the root@ clean script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-03-02T17_18_14_814Z-debug.log
The command '/bin/sh -c npm run clean' returned a non-zero code: 1
do you have other changes?
nope.
Have you ever run npm as root on your host machine?
nope. running all inside docker.
What OS and version?
$ uname -a
Linux localhost 5.4.0-135-generic #152-Ubuntu SMP Wed Nov 23 20:19:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
$ docker --version
Docker version 20.10.22, build 3a2c30b
$ cd /tmp
$ git clone https://github.com/trufflesuite/ganache.git
Cloning into 'ganache'...
remote: Enumerating objects: 45776, done.
remote: Counting objects: 100% (162/162), done.
remote: Compressing objects: 100% (90/90), done.
remote: Total 45776 (delta 84), reused 137 (delta 70), pack-reused 45614
Receiving objects: 100% (45776/45776), 319.38 MiB | 24.28 MiB/s, done.
Resolving deltas: 100% (31748/31748), done.
$ cd ganache
$ git checkout e0bb8e3ab900e94f882365fb68a9dbcd7ea07872
Note: switching to 'e0bb8e3ab900e94f882365fb68a9dbcd7ea07872'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at e0bb8e3a chore(release): publish v7.7.5
$ docker build --tag trufflesuite/ganache --file ./src/packages/ganache/Dockerfile .
Sending build context to Docker daemon 371.1MB
Step 1/16 : FROM node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484743858f AS builder
---> 7528ad312b56
Step 2/16 : WORKDIR /app
---> Using cache
---> ac9fdc6a8b1e
Step 3/16 : COPY . .
---> a3004e187194
Step 4/16 : RUN npm run clean
---> Running in aad54fd9ad29
> root@ clean /app
> npm run tsc.clean && npx lerna clean -y && npx shx rm -rf node_modules
> root@ tsc.clean /app
> npx lerna exec -- npx shx rm -rf lib dist typings
sh: 1: node-gyp-build: Permission denied
npm ERR! Maximum call stack size exceeded
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-03-02T19_14_48_840Z-debug.log
Install for [ 'lerna@latest' ] failed with code 1
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! root@ tsc.clean: `npx lerna exec -- npx shx rm -rf lib dist typings`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the root@ tsc.clean script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-03-02T19_14_49_684Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! root@ clean: `npm run tsc.clean && npx lerna clean -y && npx shx rm -rf node_modules`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the root@ clean script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-03-02T19_14_49_717Z-debug.log
The command '/bin/sh -c npm run clean' returned a non-zero code: 1
Meanwhile with the following diff it all works:
diff --git a/src/packages/ganache/Dockerfile b/src/packages/ganache/Dockerfile
index 70645d6f..8d36c434 100644
--- a/src/packages/ganache/Dockerfile
+++ b/src/packages/ganache/Dockerfile
@@ -1,9 +1,39 @@
+ARG UID=2000
+ARG GID=2000
+
+ARG INFURA_KEY=00000000000000000000000000000000
+
+# Stage: Prepare build layer ---------------------------------------------------
+
# use full node to install dependencies
-FROM node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484743858f AS builder
+FROM node:14.21.3-buster AS base-build
-WORKDIR /app
+ARG UID
+ARG GID
+
+RUN addgroup --gid ${GID} ganache; \
+ adduser --uid ${UID} --gid ${GID} ganache --disabled-password
+
+# Stage: Prepare runtime layer -------------------------------------------------
+
+FROM node:14.21.3-slim AS base-runtime
+
+ARG UID
+ARG GID
-COPY . .
+RUN addgroup --gid ${GID} ganache; \
+ adduser --uid ${UID} --gid ${GID} ganache --disabled-password
+
+# Stage: Build -----------------------------------------------------------------
+
+FROM base-build as builder
+
+ARG UID
+ARG GID
+USER ${UID}
+
+WORKDIR /app
+COPY --chown=${UID}:${GID} . .
# clean and install dependencies
RUN npm run clean
@@ -18,16 +48,21 @@ RUN npm run build
# prune development dependencies
RUN npx lerna exec --scope ganache -- npm prune --production
-# we use node "slim" instead of "alpine" until we create a uwebsockets build for alpine.
-FROM node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25d13d3401ef3
+# Stage: Run -------------------------------------------------------------------
+
+FROM base-runtime as runtime
+
+ARG UID
+ARG GID
+USER ${UID}
WORKDIR /app
# copy from build image
-COPY --from=builder /app/src/packages/ganache/node_modules node_modules
+COPY --from=builder --chown=${UID}:${GID} /app/src/packages/ganache/node_modules node_modules
# TODO(perf): we don't need everything in here. Maybe either create a separate
# build for docker or cherry-pick the files we actually need.
-COPY --from=builder /app/src/packages/ganache/dist/node dist/node
+COPY --from=builder --chown=${UID}:${GID} /app/src/packages/ganache/dist/node dist/node
ENV DOCKER true
ENV NODE_ENV production
docker build --tag trufflesuite/ganache --file ./src/packages/ganache/Dockerfile .
[+] Building 264.5s (19/19) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.77kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/node:14.21.3-slim 0.0s
=> [internal] load metadata for docker.io/library/node:14.21.3-buster 0.0s
=> [base-build 1/2] FROM docker.io/library/node:14.21.3-buster 0.0s
=> [base-runtime 1/2] FROM docker.io/library/node:14.21.3-slim 0.0s
=> CACHED [base-runtime 2/2] RUN addgroup --gid 2000 ganache; adduser --uid 2000 --gid 2000 ganache --disabled-password 0.0s
=> CACHED [runtime 1/3] WORKDIR /app 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 136.35kB 0.0s
=> CACHED [base-build 2/2] RUN addgroup --gid 2000 ganache; adduser --uid 2000 --gid 2000 ganache --disabled-password 0.0s
=> CACHED [builder 1/6] WORKDIR /app 0.0s
=> [builder 2/6] COPY --chown=2000:2000 . . 1.2s
=> [builder 3/6] RUN npm run clean 122.7s
=> [builder 4/6] RUN npm ci --unsafe-perm 94.6s
=> [builder 5/6] RUN npm run build 39.7s
=> [builder 6/6] RUN npx lerna exec --scope ganache -- npm prune --production 5.6s
=> [runtime 2/3] COPY --from=builder --chown=2000:2000 /app/src/packages/ganache/node_modules node_modules 0.2s
=> [runtime 3/3] COPY --from=builder --chown=2000:2000 /app/src/packages/ganache/dist/node dist/node 0.1s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:b8440f6d409a3d355428bb6fd6fbe168309fabad0522f0dbd25427d3b9f3381d 0.0s
=> => naming to docker.io/trufflesuite/ganache 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
Hm, interesting. Maybe updating your Docker installation could do the trick?
If I upgrade to latest Docker version 23.0.1, build a5ee5b1
, then it's even worse:
[+] Building 3.6s (10/16)
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.11kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b2 1.3s
=> [internal] load metadata for docker.io/library/node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484 0.0s
=> [builder 1/7] FROM docker.io/library/node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484743858f 0.0s
=> CANCELED [stage-1 1/4] FROM docker.io/library/node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25 2.3s
=> => resolve docker.io/library/node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25d13d3401ef3 0.0s
=> => sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25d13d3401ef3 776B / 776B 0.0s
=> => sha256:05c6986d66fc6bc3d4a9f834b7f6e0f9d6ece837d4e7f048084371886f10ea6e 1.37kB / 1.37kB 0.0s
=> => sha256:0e961fa3b333ae23536203ba2ab5a13798046411b6d5e9b5bd1995babd5668d2 6.89kB / 6.89kB 0.0s
=> => sha256:778066204fb734c2fb80cb8127cb35d67d742806a4eaf1aba0b5393c4ae6f2a4 22.53MB / 22.53MB 0.4s
=> => sha256:ceb3dca82da7d368ca5d9fd584b0f88713a7e5f94a7b32695e5875445d44ba00 4.17kB / 4.17kB 0.4s
=> => sha256:9581178a254a2be081109797260100750af113ca8d3401aa956e4a04a7f0f4b7 35.51MB / 35.51MB 0.7s
=> => extracting sha256:778066204fb734c2fb80cb8127cb35d67d742806a4eaf1aba0b5393c4ae6f2a4 0.8s
=> => sha256:4c3cfb58978dc6f16cb0011dd9c47b2824f640c6c8a355ccb4f11a6b360b64ef 2.78MB / 2.78MB 0.7s
=> => sha256:cf646259b15a5fb428959a60ccc5ad7b645cf37faa1fc1a6f4d96d94dcc3b433 293B / 293B 0.5s
=> => extracting sha256:ceb3dca82da7d368ca5d9fd584b0f88713a7e5f94a7b32695e5875445d44ba00 0.0s
=> => extracting sha256:9581178a254a2be081109797260100750af113ca8d3401aa956e4a04a7f0f4b7 1.0s
=> [internal] load build context 1.4s
=> => transferring context: 378.00MB 1.4s
=> [builder 2/7] WORKDIR /app 0.0s
=> [builder 3/7] COPY . . 0.6s
=> ERROR [builder 4/7] RUN npm run clean 0.3s
------
> [builder 4/7] RUN npm run clean:
#0 0.227 runc run failed: unable to start container process: error during container init: unable to apply apparmor profile: apparmor failed to apply profile: write /proc/self/attr/apparmor/exec: no such file or directory
------
Dockerfile:9
--------------------
7 |
8 | # clean and install dependencies
9 | >>> RUN npm run clean
10 | RUN npm ci --unsafe-perm
11 |
--------------------
ERROR: failed to solve: process "/bin/sh -c npm run clean" did not complete successfully: exit code: 1
...and then after fixing the apparmor thingy:
[+] Building 34.7s (11/16)
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.11kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b2 0.7s
=> [internal] load metadata for docker.io/library/node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484 0.0s
=> [builder 1/7] FROM docker.io/library/node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484743858f 0.0s
=> [stage-1 1/4] FROM docker.io/library/node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25d13d3401e 3.0s
=> => resolve docker.io/library/node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25d13d3401ef3 0.0s
=> => sha256:9581178a254a2be081109797260100750af113ca8d3401aa956e4a04a7f0f4b7 35.51MB / 35.51MB 1.4s
=> => sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25d13d3401ef3 776B / 776B 0.0s
=> => sha256:05c6986d66fc6bc3d4a9f834b7f6e0f9d6ece837d4e7f048084371886f10ea6e 1.37kB / 1.37kB 0.0s
=> => sha256:0e961fa3b333ae23536203ba2ab5a13798046411b6d5e9b5bd1995babd5668d2 6.89kB / 6.89kB 0.0s
=> => sha256:778066204fb734c2fb80cb8127cb35d67d742806a4eaf1aba0b5393c4ae6f2a4 22.53MB / 22.53MB 0.4s
=> => sha256:ceb3dca82da7d368ca5d9fd584b0f88713a7e5f94a7b32695e5875445d44ba00 4.17kB / 4.17kB 0.4s
=> => sha256:cf646259b15a5fb428959a60ccc5ad7b645cf37faa1fc1a6f4d96d94dcc3b433 293B / 293B 0.6s
=> => sha256:4c3cfb58978dc6f16cb0011dd9c47b2824f640c6c8a355ccb4f11a6b360b64ef 2.78MB / 2.78MB 1.0s
=> => extracting sha256:778066204fb734c2fb80cb8127cb35d67d742806a4eaf1aba0b5393c4ae6f2a4 0.8s
=> => extracting sha256:ceb3dca82da7d368ca5d9fd584b0f88713a7e5f94a7b32695e5875445d44ba00 0.0s
=> => extracting sha256:9581178a254a2be081109797260100750af113ca8d3401aa956e4a04a7f0f4b7 1.3s
=> => extracting sha256:4c3cfb58978dc6f16cb0011dd9c47b2824f640c6c8a355ccb4f11a6b360b64ef 0.1s
=> => extracting sha256:cf646259b15a5fb428959a60ccc5ad7b645cf37faa1fc1a6f4d96d94dcc3b433 0.0s
=> [internal] load build context 1.4s
=> => transferring context: 378.00MB 1.4s
=> CACHED [builder 2/7] WORKDIR /app 0.0s
=> [builder 3/7] COPY . . 0.7s
=> ERROR [builder 4/7] RUN npm run clean 31.9s
=> [stage-1 2/4] WORKDIR /app 0.1s
------
> [builder 4/7] RUN npm run clean:
#0 0.484
#0 0.484 > root@ clean /app
#0 0.484 > npm run tsc.clean && npx lerna clean -y && npx shx rm -rf node_modules
#0 0.484
#0 0.626
#0 0.626 > root@ tsc.clean /app
#0 0.626 > npx lerna exec -- npx shx rm -rf lib dist typings
#0 0.626
#0 31.07 sh: 1: node-gyp-build: Permission denied
#0 31.17 npm ERR! Maximum call stack size exceeded
#0 31.19
#0 31.19 npm ERR! A complete log of this run can be found in:
#0 31.19 npm ERR! /root/.npm/_logs/2023-03-02T22_15_55_594Z-debug.log
#0 31.23 Install for [ 'lerna@latest' ] failed with code 1
#0 31.78 npm ERR! code ELIFECYCLE
#0 31.78 npm ERR! errno 1
#0 31.79 npm ERR! root@ tsc.clean: `npx lerna exec -- npx shx rm -rf lib dist typings`
#0 31.79 npm ERR! Exit status 1
#0 31.79 npm ERR!
#0 31.79 npm ERR! Failed at the root@ tsc.clean script.
#0 31.79 npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
#0 31.79
#0 31.79 npm ERR! A complete log of this run can be found in:
#0 31.79 npm ERR! /root/.npm/_logs/2023-03-02T22_15_56_195Z-debug.log
#0 31.80 npm ERR! code ELIFECYCLE
#0 31.80 npm ERR! errno 1
#0 31.81 npm ERR! root@ clean: `npm run tsc.clean && npx lerna clean -y && npx shx rm -rf node_modules`
#0 31.81 npm ERR! Exit status 1
#0 31.81 npm ERR!
#0 31.81 npm ERR! Failed at the root@ clean script.
#0 31.81 npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
#0 31.81
#0 31.81 npm ERR! A complete log of this run can be found in:
#0 31.81 npm ERR! /root/.npm/_logs/2023-03-02T22_15_56_215Z-debug.log
------
Dockerfile:9
--------------------
7 |
8 | # clean and install dependencies
9 | >>> RUN npm run clean
10 | RUN npm ci --unsafe-perm
11 |
--------------------
ERROR: failed to solve: process "/bin/sh -c npm run clean" did not complete successfully: exit code: 1
Do you think your particular system is in an odd state, since it seems that docker itself was complaining?
I tried this on 3 different machies with the same result.
meanwhile, the patch quoted above does the trick even for docker 23.0.1..
I will push the PR - you decide.
Odd. You might need to run npm ci
before running the Docker command (an odd step, but that's what our CI does).
I'll look into this more next week.
FYI: we can't use that patch as is, as the node versions would all need to be pinned.
is node:14.21.3-buster
or node:14.21.3-slim
not pinning it enough?
I saw you pin down to digest SHA, but then you build for different platforms (that have different SHA's for their base images). so I am not sure how this is supposed to really work.
and adding npm ci
does not help either (it just fails with the same error a bit later):
[+] Building 77.3s (14/17)
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.12kB 0.0s
=> [internal] load metadata for docker.io/library/node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b2 1.2s
=> [internal] load metadata for docker.io/library/node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484 1.1s
=> [stage-1 1/4] FROM docker.io/library/node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25d13d3401e 2.9s
=> => resolve docker.io/library/node:14.17.4-slim@sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25d13d3401ef3 0.0s
=> => sha256:ceb3dca82da7d368ca5d9fd584b0f88713a7e5f94a7b32695e5875445d44ba00 4.17kB / 4.17kB 0.1s
=> => sha256:9581178a254a2be081109797260100750af113ca8d3401aa956e4a04a7f0f4b7 35.51MB / 35.51MB 0.7s
=> => sha256:766e2dcf4461582f7f750656807edbc28019753cecae92b1f2b25d13d3401ef3 776B / 776B 0.0s
=> => sha256:05c6986d66fc6bc3d4a9f834b7f6e0f9d6ece837d4e7f048084371886f10ea6e 1.37kB / 1.37kB 0.0s
=> => sha256:0e961fa3b333ae23536203ba2ab5a13798046411b6d5e9b5bd1995babd5668d2 6.89kB / 6.89kB 0.0s
=> => sha256:778066204fb734c2fb80cb8127cb35d67d742806a4eaf1aba0b5393c4ae6f2a4 22.53MB / 22.53MB 0.5s
=> => sha256:4c3cfb58978dc6f16cb0011dd9c47b2824f640c6c8a355ccb4f11a6b360b64ef 2.78MB / 2.78MB 0.6s
=> => sha256:cf646259b15a5fb428959a60ccc5ad7b645cf37faa1fc1a6f4d96d94dcc3b433 293B / 293B 0.7s
=> => extracting sha256:778066204fb734c2fb80cb8127cb35d67d742806a4eaf1aba0b5393c4ae6f2a4 0.8s
=> => extracting sha256:ceb3dca82da7d368ca5d9fd584b0f88713a7e5f94a7b32695e5875445d44ba00 0.0s
=> => extracting sha256:9581178a254a2be081109797260100750af113ca8d3401aa956e4a04a7f0f4b7 1.2s
=> => extracting sha256:4c3cfb58978dc6f16cb0011dd9c47b2824f640c6c8a355ccb4f11a6b360b64ef 0.1s
=> => extracting sha256:cf646259b15a5fb428959a60ccc5ad7b645cf37faa1fc1a6f4d96d94dcc3b433 0.0s
=> [builder 1/8] FROM docker.io/library/node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484743858f 12.9s
=> => resolve docker.io/library/node:14.17.4@sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484743858f 0.0s
=> => sha256:7528ad312b56c3fde80242e27629841c581ebdc5fa16ade80c75afb37a7ff5cf 7.63kB / 7.63kB 0.0s
=> => sha256:cd98882c1093f758d09cf6821dc8f96b241073b38e8ed294ca1f9e484743858f 776B / 776B 0.0s
=> => sha256:341976f40d963a425d627a349a9b0034e1eafffbf4c82a173c1465ee403878d9 2.21kB / 2.21kB 0.0s
=> => sha256:08224db8ce18b31a78a0a26d1b344d173528e50a7067797c9df4de5d8df353e2 45.38MB / 45.38MB 1.3s
=> => sha256:abd3caf86f5b9d8f8e63437571297df5fa6d454140b9c1985c47d6ad526da824 11.29MB / 11.29MB 1.3s
=> => sha256:71c316554a558d4aa95c0be17c01e4a0366d6026a98eeba53dca5baa6091e815 4.34MB / 4.34MB 1.0s
=> => sha256:721081de66bfc648ce19234c6333d6e031344f6ac90904476c9ec2dba2917e3a 49.76MB / 49.76MB 76.1s
=> => extracting sha256:08224db8ce18b31a78a0a26d1b344d173528e50a7067797c9df4de5d8df353e2 1.3s
=> => sha256:239fb482263d7865a4a15a52e4a4be892393343c0c4318a930f770d6da32cba0 214.42MB / 214.42MB 4.2s
=> => sha256:26d24e5f0efd7c5c58ddff4cfec92f90d66e3d2f0c622b21a130dc694690a7f5 4.19kB / 4.19kB 1.5s
=> => sha256:5da5632c9c23188d7ca078dbb47f58c9a3b8f8f25bad1b164ac5fafba4511fb8 35.01MB / 35.01MB 2.4s
=> => sha256:df05aab91a5a559559bb2e11bab056e426b8fd125d616fb5450e407fdf3445ea 2.34MB / 2.34MB 2.6s
=> => sha256:7284fe187258517cc19e44ab4a003a25e9058c606319a885e3df113cafafa31a 294B / 294B 3.1s
=> => extracting sha256:abd3caf86f5b9d8f8e63437571297df5fa6d454140b9c1985c47d6ad526da824 0.4s
=> => extracting sha256:71c316554a558d4aa95c0be17c01e4a0366d6026a98eeba53dca5baa6091e815 0.2s
=> => extracting sha256:721081de66bfc648ce19234c6333d6e031344f6ac90904476c9ec2dba2917e3a 1.7s
=> => extracting sha256:239fb482263d7865a4a15a52e4a4be892393343c0c4318a930f770d6da32cba0 6.1s
=> => extracting sha256:26d24e5f0efd7c5c58ddff4cfec92f90d66e3d2f0c622b21a130dc694690a7f5 0.0s
=> => extracting sha256:5da5632c9c23188d7ca078dbb47f58c9a3b8f8f25bad1b164ac5fafba4511fb8 1.2s
=> => extracting sha256:df05aab91a5a559559bb2e11bab056e426b8fd125d616fb5450e407fdf3445ea 0.1s
=> => extracting sha256:7284fe187258517cc19e44ab4a003a25e9058c606319a885e3df113cafafa31a 0.0s
=> [internal] load build context 1.5s
=> => transferring context: 378.00MB 1.5s
=> [stage-1 2/4] WORKDIR /app 0.5s
=> [builder 2/8] WORKDIR /app 0.4s
=> [builder 3/8] COPY . . 0.4s
=> [builder 4/8] RUN npm ci 5.3s
=> [builder 5/8] RUN npm run clean 2.5s
=> [builder 6/8] RUN npm ci --unsafe-perm 51.2s
=> ERROR [builder 7/8] RUN npm run build 3.4s
------
> [builder 7/8] RUN npm run build:
#0 0.446
#0 0.446 > root@ build /app
#0 0.446 > npm run tsc && cross-env NODE_OPTIONS=--max_old_space_size=4096 lerna run build
#0 0.446
#0 0.587
#0 0.587 > root@ tsc /app
#0 0.587 > tsc --build src
#0 0.587
#0 1.094 lerna notice cli v4.0.0
#0 1.096 lerna info versioning independent
#0 1.133 lerna info Executing command in 3 packages: "npm run build"
#0 3.349 lerna ERR! npm run build exited 2 in 'ganache'
#0 3.349 lerna ERR! npm run build stdout:
#0 3.350
#0 3.350 > ganache@7.7.5 build /app/src/packages/ganache
#0 3.350 > npm run tsc && npx shx rm -rf ./dist && webpack && npm run types
#0 3.350
#0 3.350
#0 3.350 > ganache@7.7.5 tsc /app/src/packages/ganache
#0 3.350 > tsc --build
#0 3.350
#0 3.350 lerna ERR! npm run build stderr:
#0 3.350 [webpack-cli] Failed to load '/app/src/packages/ganache/webpack.config.ts' config
#0 3.350 [webpack-cli] Error: The `INFURA_KEY` environment variable was not supplied at build time. To bypass this check set the environment variable `CREATE_BROKEN_BUILD` to `"I WILL NOT PUBLISH THIS"`.
#0 3.350 at Object.<anonymous> (/app/src/packages/ganache/webpack/webpack.common.config.ts:22:9)
#0 3.350 at Module._compile (internal/modules/cjs/loader.js:1072:14)
#0 3.350 at Module.m._compile (/app/src/packages/ganache/node_modules/ts-node/src/index.ts:1618:23)
#0 3.350 at Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
#0 3.350 at Object.require.extensions.<computed> [as .ts] (/app/src/packages/ganache/node_modules/ts-node/src/index.ts:1621:12)
#0 3.350 at Module.load (internal/modules/cjs/loader.js:937:32)
#0 3.350 at Function.Module._load (internal/modules/cjs/loader.js:778:12)
#0 3.350 at Module.require (internal/modules/cjs/loader.js:961:19)
#0 3.350 at require (internal/modules/cjs/helpers.js:92:18)
#0 3.350 at Object.<anonymous> (/app/src/packages/ganache/webpack/webpack.browser.config.ts:1:1)
#0 3.350 npm ERR! code ELIFECYCLE
#0 3.350 npm ERR! errno 2
#0 3.350 npm ERR! ganache@7.7.5 build: `npm run tsc && npx shx rm -rf ./dist && webpack && npm run types`
#0 3.350 npm ERR! Exit status 2
#0 3.350 npm ERR!
#0 3.350 npm ERR! Failed at the ganache@7.7.5 build script.
#0 3.350 npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
#0 3.350
#0 3.350 npm ERR! A complete log of this run can be found in:
#0 3.350 npm ERR! /root/.npm/_logs/2023-03-02T22_46_09_968Z-debug.log
#0 3.350 lerna ERR! npm run build exited 2 in 'ganache'
#0 3.350 lerna WARN complete Waiting for 1 child process to exit. CTRL-C to exit immediately.
#0 3.360 npm ERR! code ELIFECYCLE
#0 3.360 npm ERR! errno 2
#0 3.364 npm ERR! root@ build: `npm run tsc && cross-env NODE_OPTIONS=--max_old_space_size=4096 lerna run build`
#0 3.364 npm ERR! Exit status 2
#0 3.364 npm ERR!
#0 3.364 npm ERR! Failed at the root@ build script.
#0 3.364 npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
#0 3.366
#0 3.366 npm ERR! A complete log of this run can be found in:
#0 3.366 npm ERR! /root/.npm/_logs/2023-03-02T22_46_09_990Z-debug.log
------
Dockerfile:17
--------------------
15 |
16 | # build application
17 | >>> RUN npm run build
18 |
19 | # prune development dependencies
--------------------
ERROR: failed to solve: process "/bin/sh -c npm run build" did not complete successfully: exit code: 2
I was able to reproduce the issue, and it resolved when I installing npm dependencies on the host.
In https://github.com/trufflesuite/ganache/issues/4273#issuecomment-1452669883 it looks like this did resolve the issue, and is now complaining about the INFURA_KEY variable not being set.
#0 3.350 [webpack-cli] Error: The `INFURA_KEY` environment variable was not supplied at build time. To bypass this check set the environment variable `CREATE_BROKEN_BUILD` to `"I WILL NOT PUBLISH THIS"`.
#0 3.350 at Object.<anonymous> (/app/src/packages/ganache/webpack/webpack.common.config.ts:22:9)
#0 3.350 at Module._compile (internal/modules/cjs/loader.js:1072:14)
#0 3.350 at Module.m._compile (/app/src/packages/ganache/node_modules/ts-node/src/index.ts:1618:23)
#0 3.350 at Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
#0 3.350 at Object.require.extensions.<computed> [as .ts] (/app/src/packages/ganache/node_modules/ts-node/src/index.ts:1621:12)
#0 3.350 at Module.load (internal/modules/cjs/loader.js:937:32)
#0 3.350 at Function.Module._load (internal/modules/cjs/loader.js:778:12)
#0 3.350 at Module.require (internal/modules/cjs/loader.js:961:19)
#0 3.350 at require (internal/modules/cjs/helpers.js:92:18)
#0 3.350 at Object.<anonymous> (/app/src/packages/ganache/webpack/webpack.browser.config.ts:1:1)
With npm deps installed, the following works for me:
docker build --build-arg="INFURA_KEY=xxx" --tag localganache --file src/packages/ganache/Dockerfile .
There may well be improvements we need to make, but can you please confirm whether this workaround helps?
Sounds like we need 3 changes:
INFURA_KEY
requirement like we have for npm build
.@davidmurdoch the PR that I pushed addresses all 3 points.
I get an error if I try to build the docker image (as suggested in README.md):