Ich versuche, ein Setup zu erstellen, in dem ich einen Docker-Container habe, von dem aus ich ethereumjs/testrpc (eine Ethereum-Testumgebung) und einen anderen Docker-Container ausführe, auf dem eine Express-App ausgeführt wird. Ich wollte dann beides verbinden und, sagen wir, Kontostände in meiner Express-App anzeigen.
Mein Dockerfile ist
FROM node:boron
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# RUN npm install -g ethereumjs-testrpc --> tested adding this line
# did not work either
# Bundle app source
COPY . /usr/src/app
EXPOSE 3000
CMD [ "npm", "start" ]
und docker-compose sieht wie folgt aus
version: "2.0"
services:
web:
build: .
volumes:
- .:/usr/src/app
ports:
- "3000:3000"
links:
- mongo
mongo:
image: mongo
ports:
- "27017:27017"
ethereum:
image: ethereumjs/testrpc:latest
Die Fehlerausgabe, die ich bekomme, sieht aus wie
web_1 | module.js:471
web_1 | throw err;
web_1 | ^
web_1 |
web_1 | Error: Cannot find module 'ethereumjs-testrpc'
web_1 | at Function.Module._resolveFilename (module.js:469:15)
web_1 | at Function.Module._load (module.js:417:25)
web_1 | at Module.require (module.js:497:17)
web_1 | at require (internal/module.js:20:19)
web_1 | at Object.<anonymous> (/usr/src/app/app.js:7:15)
web_1 | at Module._compile (module.js:570:32)
web_1 | at Object.Module._extensions..js (module.js:579:10)
web_1 | at Module.load (module.js:487:32)
web_1 | at tryModuleLoad (module.js:446:12)
web_1 | at Function.Module._load (module.js:438:3)
app.js
Schließlich ist der Anfang meiner
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var TestRPC = require("ethereumjs-testrpc"); // these two lines are throwing
web3.setProvider(TestRPC.provider()); // the errors
Ich verstehe nicht, wie ich das beheben kann, und habe verschiedene Dinge ausprobiert, von denen keines zu funktionieren scheint. Jeder Hinweis in die richtige Richtung wäre sehr willkommen!
Hast du ethereumjs-testrpc
im Abschnitt "Abhängigkeiten" deines package.json
? z.B:
"dependencies": {
"ethereumjs-testrpc": "^4.0.1"
}
Wenn nicht, könnte dies zu dem Fehler führen, den Sie erhalten.
Beim Ausführen npm install ethereumjs-testrpc --save
wird dies automatisch zu Ihrer hinzugefügt package.json
. Beachten Sie, dass dies ein einmaliger Befehl ist und nicht Teil der Dockerfile
. Es aktualisiert einfach Ihre package.json mit der aktuellsten Version.
Auch, wenn Sie die -g
von entfernt haben
# RUN npm install -g ethereumjs-testrpc --> tested adding this line
... das würde wahrscheinlich auch funktionieren - aber wenn Sie es in Ihrem haben, package.json
entfällt die Notwendigkeit, dies zu tun, da es im Befehl in der vorherigen Zeile installiert wird:
RUN npm install