Porównaj ceny domen i usług IT, sprzedawców z całego świata

Bcrypt: nieprawidłowy nagłówek ELF z Docker i Sails.JS


Mój węzeł
Dockfile
:
# Set the base image to ubuntu
FROM ubuntu# Define working directory
ADD ./src
WORKDIR/src# Install Node.js & other dependencies
RUN apt-get update && \
apt-get -y install curl && \
apt-get -y install sudo && \
curl -sL [url=https://deb.nodesource.com/setup_0.12]https://deb.nodesource.com/setup_0.12[/url] | sudo bash - && \
apt-get -y install python build-essential nodejsRUN npm install -g node-gyp && \
node-gyp clean && \
npm cache cleanRUN node -v# Install nodemon
RUN npm install -g nodemon
ADD package.json/src/package.json
RUN cd/src && npm install
# Expose port
EXPOSE 8080# Run app using nodemon
CMD npm install; nodemon/src/app.js

Oto mój
docker-compose.yml
:
nginx:
build: ./nginx
links:
- node1:node1
- node2:node2
- node3:node3
ports:
- "80:80"
redis:
image: redis
ports:
- "6379"
node1:
build: ./node
links:
- redis
ports:
- "8080"
node2:
build: ./node
links:
- redis
ports:
- "8080"
node3:
build: ./node
links:
- redis
ports:
- "8080"

Docker-compose build
działa pomyślnie, a Redis/Nginx jest poprawnie skonfigurowany dla
docker-compose up
, ale wystąpienia węzłów zgłaszają ten błąd:
node2_1 |/src/node_modules/bcrypt/node_modules/bindings/bindings.js:83
node2_1 | throw e
node2_1 | ^
node2_1 | Error:/src/node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header
node2_1 | at Error (native)
node2_1 | at Module.load (module.js:355:32)
node2_1 | at Function.Module._load (module.js:310:12)
node2_1 | at Module.require (module.js:365:17)
node2_1 | at require (module.js:384:17)
node2_1 | at bindings (/src/node_modules/bcrypt/node_modules/bindings/bindings.js:76:44)
node2_1 | at Object.<anonymous> (/src/node_modules/bcrypt/bcrypt.js:3:35)
node2_1 | at Module._compile (module.js:460:26)
node2_1 | at Object.Module._extensions..js (module.js:478:10)
node2_1 | at Module.load (module.js:355:32)
node2_1 | at Function.Module._load (module.js:310:12)
node2_1 | at Module.require (module.js:365:17)
node2_1 | at require (module.js:384:17)
node2_1 | at Object.<anonymous> (/src/api/models/User.js:10:14)
node2_1 | at Module._compile (module.js:460:26)
node2_1 | at Object.Module._extensions..js (module.js:478:10)
node2_1 | 19 Aug 20:21:11 - [nodemon] app crashed - waiting for file changes before starting...

Szukałem wszędzie i nie mogę znaleźć rozwiązania, które działałoby. Próbowałem użyć normalnego ustawienia adresu URL:
[url=https://deb.nodesource.com/setup]https://deb.nodesource.com/setup[/url]
, a konkretnie zainstalować
python2.7
i użyć obrazu
ubuntu: 15.04
.
Czytałem, że dzieje się tak, gdy ludzie próbują używać bcrypt na linux env po tym, jak został zbudowany na OS X (mój system operacyjny), ale nie sądzę, że będzie to problem, ponieważ buduję wszystko za pomocą docker i boot2docker ...
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Upewnij się, że nie kopiujesz folderu
node_modules
. Otrzymałem ten błąd podczas używania oficjalnego obrazu "onbuild" nodejs, który kopiowałby wszystko ...
Teraz używam:
.dockerignore
node_modules

dockerfile
FROM node:6.4.0RUN mkdir -p/usr/src/app
WORKDIR/usr/src/appCOPY package.json/usr/src/app/
RUN npm install
COPY ./usr/src/appCMD [ "npm", "start" ]EXPOSE 6969


Edit
: Oficjalny projekt obrazu startowego NodeJS Docker na Github zaakceptował moje żądanie ściągnięcia dla README, które instruuje, aby jawnie ignorować node_modules.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Doświadczyłem tego samego, chociaż używam ekspresu zamiast żagli. Wypróbowałem tutaj wszystkie sugestie, ale bezskutecznie. Sztuczka polegała na zmianie modułu npm bcrypt na bcryptjs:
npm uninstal bcrypt
npm install bcryptjs --save

Następnie zmień swoje wymaganie na coś podobnego
var bcrypt = require('bcryptjs');

Teraz działa bez zarzutu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W konfiguracji mojego pakietu miałem
"bcrypt": "^ 0.8.0"
i kiedy wyszedłem
^
i zmieniłem go na
"bcrypt": "0.8. 0 "
, udało mi się wszystko uruchomić.
Problem polegał na tym, że próbował uruchomić bcrypt 0.8.5 iz jakiegoś powodu powodował problemy.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

żeby dodać nowy możliwy powód. Próbowałem zbudować mój obraz Dockera dla aplikacji nodejs, ale mam błąd
nieprawidłowy nagłówek ELF
. W moim przypadku
Rozwiązałem ten problem, dodając
node_modules/*
z pliku .dockerignore.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zauważyłem, że wykluczenie całego lokalnego katalogu
node_modules
uniemożliwia zainstalowanie pakietów npm i sprawienie, że Twój kontener docker śledzi te zmiany w locie. Za każdym razem będę musiał przebudowywać mój kontener. Aby tego uniknąć, określ tylko katalog bcrypt w woluminie kontenera i pozwól dockerowi śledzić zmiany podczas instalowania lub usuwania innych pakietów:
volumes: 
- .:/app
-/app/node_modules/bcrypt/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jest prosty sposób, który pozwolił mi rozwiązać ten problem, myślę, że może ci pomóc również w Dockerze, po prostu dodaj tę instrukcję do instrukcji, aby uruchomić plik dockera na tobie

1. Przeprowadzenie usunięcia

npm uninstall bcrypt


2. - Ponownie zainstaluj BCrypt

npm i bcrypt


Edytuj tę część pliku dokowanego, dodając linie

ADD package.json/src/package.json
RUN cd/src && npm install
#Solve the problem reinstaling bcrypt
RUN npm uninstall bcrypt
RUN npm i bcrypt
# Expose port
EXPOSE 8080

Błąd występuje, ponieważ podczas instalowania bcypt, npm instaluje zalecaną wersję dla twojego komputera i systemu operacyjnego, ale gdy jesteś na innym komputerze, nie działa.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Root Cause = & > Kontekst Dockera. Kontekst Dockera kopiuje wszystko z folderu głównego do katalogu roboczego kontenera docelowego.
Musisz więc dodać plik .dockerignore i dodać te wpisy (z innymi plikami, które chcesz zignorować)
  • foldery node_modules
  • npm-debug.log

A teraz, kiedy budujesz kontener, zbuduje wszystko zgodnie z systemem operacyjnym kontenera.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się