2016-08-14 4 views
1

Я пытаюсь использовать docker-compose только с контейнером узла, чтобы узнать и после использования другого контейнера. У меня есть Dockerfile узла, и я разделяю папку узла.Объемы докеров не работают

Вот моя структура:

- front-end folder 
    * docker-compose.yml 
    - node folder 
    * package.json 
    * Dockerfile.json 
    * server.js 

Мой Dockerfile является узел из dockerhub:

FROM buildpack-deps:jessie 

# gpg keys listed at https://github.com/nodejs/node 
RUN set -ex \ 
    && for key in \ 
    9554F04D7259F04124DE6B476D5A82AC7E37093B \ 
    94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ 
    0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \ 
    FD3A5288F042B6850C66B31F09FE44734EB7990E \ 
    71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ 
    DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ 
    B9AE9905FFD7803F25714661B63B535A4C206CA9 \ 
    C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ 
    ; do \ 
    gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ 
    done 

ENV NODE_VERSION 0.12.15 

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \ 
    && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ 
    && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ 
    && grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ 
    && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \ 
    && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt 

CMD [ "node" ] 

И мой докер-compose.yml является:

version: '2' 
services: 
    node: 
    build: ./node 
    ports: 
     - '8080:8080' 
    volumes: 
     - ./node:/usr/local/src/node 

Я могу запустите команду docker-compose run node npm install any_package, но когда я запустил команду docker-compose run node npm install, я получаю эту ошибку:

npm ERR! install Couldn't read dependencies 
npm ERR! Linux 4.4.12-boot2docker 
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "i" 
npm ERR! node v0.12.15 
npm ERR! npm v2.15.1 
npm ERR! path /package.json 
npm ERR! code ENOPACKAGEJSON 
npm ERR! errno -2 

npm ERR! package.json ENOENT, open '/package.json' 
npm ERR! package.json This is most likely not a problem with npm itself. 
npm ERR! package.json npm can't find a package.json file in your current directory. 

npm ERR! Please include the following file with any support request: 
npm ERR!  /npm-debug.log 

И когда я бегу docker-compose run node npm install any_package, папка node_modules должна появится в папке моего узла. Это правильно?

ответ

0

Не видя своего Dockerfile, неясно, как вы указываете свое приложение на/usr/local/src/node. Таким образом, ваша команда может искать файлы в другом месте.

Предполагая, что ваш файл Dockerfile указывает узел узла/usr/local/bin/node, я подозреваю, что ваша проблема связана с томом хоста. С томами хоста две наиболее распространенные ошибки, которые я видел, - это разрешения с различными uid и попытки установить папки с машины-разработчика изнутри виртуальной машины Docker. Boot2docker заставляет меня думать, что вы переживаете последнее. Debug со следующим:

docker-compose run node ls -l /usr/local/bin/node 

Если это показывает пустой каталог, то это монтирование папки из виртуальной машины, а не ваша Windows/MacOS. Используйте папки в c:/Users (Windows) или/Users (MacOS), чтобы получить общий ресурс, который отображается в виртуальной машине.

Если он показывает файлы с разными разрешениями, вы можете обойти это, открыв разрешения на хосте Docker (файл chmod 777) или сделав uid и gid внутри контейнера зеркальным отображением вашего хоста (это должно перед установкой любых приложений в файл Docker).

+0

Я добавлю свой файл Docker –

+0

Должен ли я добавить workdir в/usr/local/bin/node? –

+0

С помощью этого файла Dockerfile он просматривает все ваши файлы. Использование 'WORKDIR/usr/local/bin/node' в вашем файле Docker или' work_dir:/usr/local/bin/node' должно пройти мимо этой ошибки. – BMitch

0

Ваш package.json в /usr/local/src/node и node (который бежал от /) ожидает, что это будет в /.