2017-09-29 2 views
1

J'utilise une image ubuntu:latest pour créer une image docker meteorJS. Le problème est, que météore est téléchargé deux fois et je reçois quelques avertissements pour package.json.Docker: MeteorJS s'installe deux fois avec quelques avertissements

Dockerfile

FROM ubuntu:latest 

# build arguments 
ARG APP_PACKAGES 
ARG APP_LOCALE=en_US 
ARG APP_CHARSET=UTF-8 
ARG APP_USER=app 
ARG APP_USER_DIR=/home/${APP_USER} 

# set the locale (required by Meteor) 
RUN locale-gen ${APP_LOCALE} 
RUN localedef ${APP_LOCALE}.${APP_CHARSET} -i ${APP_LOCALE} -f ${APP_CHARSET} 

# create a non-root user that can write to /usr/local (required by Meteor) 
RUN useradd -mUd ${APP_USER_DIR} ${APP_USER} 
RUN chown -Rh ${APP_USER} /usr/local 
USER ${APP_USER} 

# MeteorJS 
RUN curl https://install.meteor.com/ | sh 

# NPM packages 
WORKDIR '/builds/project/data' 
RUN meteor npm install gridfs-stream gm fluent-ffmpeg 

Et la dernière partie (RUN meteor ...) me donne ceci:

This is your first time using Meteor! 
Installing a Meteor distribution in your home directory. 
Downloading Meteor distribution 

Alors météore est téléchargé deux fois:

  1. boucle ...
  2. météore NPM installer ...

Aussi je reçois cet avertissement:

npm WARN enoent ENOENT: no such file or directory, open '/builds/project/data/package.json' 
npm WARN media No description 
npm WARN media No repository field. 
npm WARN media No README data 
npm WARN media No license field. 

Pourquoi devrait-il y avoir un package.json, même si je ne l'utilise --save?

+0

Je ne vous vois pas installer la commande curl et curl n'est pas là par défaut dans ubuntu. Alors, comment se passe-t-il? RUN curl https://install.meteor.com/ | sh' est-ce que ça marche? –

+0

Vous avez raison. J'ai sauté cette partie du Dockerfile pour le garder lisible ... – user3142695

Répondre

2

Votre problème est que vous changez d'utilisateur entre le Dockerfile qui cause des problèmes d'autorisation. Ci-dessous dockerfile fonctionne très bien pour moi

FROM ubuntu:latest 
RUN apt update && apt install -y curl 
# build arguments 
ARG APP_PACKAGES 
ARG APP_LOCALE=en_US 
ARG APP_CHARSET=UTF-8 
ARG APP_USER=app 
ARG APP_USER_DIR=/home/${APP_USER} 

# set the locale (required by Meteor) 
#RUN locale-gen ${APP_LOCALE} 
#RUN localedef ${APP_LOCALE}.${APP_CHARSET} -i ${APP_LOCALE} -f ${APP_CHARSET} 

# create a non-root user that can write to /usr/local (required by Meteor) 
RUN useradd -mUd ${APP_USER_DIR} ${APP_USER} 
RUN chown -Rh ${APP_USER} /usr/local 
USER ${APP_USER} 

# MeteorJS 
RUN curl https://install.meteor.com/ | sh 

# NPM packages 
RUN mkdir -p /usr/local/builds/project/data 
WORKDIR '/usr/local/builds/project/data' 
RUN meteor npm install gridfs-stream gm fluent-ffmpeg 

Les deux principaux changements que j'ai fait sont ci-dessous

RUN mkdir -p /usr/local/builds/project/data 
WORKDIR '/usr/local/builds/project/data' 

Vous voulez créer le répertoire de votre auto, au lieu de laisser WORKDIR créer. Le répertoire que vous créez aura des autorisations qui appartiennent à votre utilisateur. Mais si le répertoire n'existe pas alors vous utilisez WORKDIR et il crée le répertoire alors il n'aura pas l'autorisation correcte.

Ensuite parce que vous avez changé d'utilisateur, vous n'avez plus la permission de créer /builds/project/data en root. Mais vous possédez /usr/local/ donc vous devriez le faire comme chemin de départ. Aussi l'avertissement npm que vous voyez est ok, il avertira toujours si package.json n'est pas là et vous essayez d'installer le module local. Donc, vous pouvez l'ignorer tant qu'il dit WARN

+0

Comprendre. Mais je dois utiliser le jobdir donné, car mon CI va tirer les données dans ce répertoire. Donc, je reçois des problèmes d'autorisation en ce moment ... – user3142695

+0

Ensuite, changez RUN chown -Rh $ {APP_USER}/usr/local' en RUN mkdir -p/builds/projet/data && chown -Rh $ {APP_USER}/usr/local/builds/project/data' et remplacez 'WORKDIR' par' WORKDIR/builds/project/data' –