2016-08-06 2 views
1

나는 this guide을 따르고 있습니다. 개발자 환경을 개선하기 위해 낮은 도커 지식을 사용하고 있습니다. 나는 해결할 수없는 벽을 때렸다. 이것은 내 docker-compose.yml입니다 :Docker가 내 index.js를 찾지 못하도록 구성합니다.

version: '2' 
services: 
    redis: 
    image: redis:3.2 
    mongo: 
    image: mongo:3.2 
    app: 
    build: . 
    ports: 
     - '3000:3000' 
    command: './node_modules/.bin/nodemon ./index.js' 
    environment: 
     NODE_ENV: development 
    volumes: 
     - .:/home/app/cardcreator 
     - /home/app/cardcreator/node_modules 
    depends_on: 
     - redis 
     - mongo 
    links: 
     - redis 
     - mongo 

이것은 내 Dockerfile : 나는 docker-compose up를 통해 응용 프로그램을 시작하려고하면

FROM node:6.3.1 

RUN useradd --user-group --create-home --shell /bin/false app 

ENV HOME=/home/app 

COPY package.json npm-shrinkwrap.json $HOME/cardcreator/ 
RUN chown -R app:app $HOME/* 

USER app 
WORKDIR $HOME/cardcreator 
RUN npm install 

USER root 
COPY . $HOME/cardcreator/ 
RUN chown -R app:app $HOME/* 
USER app 

CMD ["node", "index.js"] 

, 나는 다음을 제거

app_1 | Usage: nodemon [nodemon options] [script.js] [args] 
app_1 | See "nodemon --help" for more. 

오류를 얻을 내 docker-compose.ymlcommand 행은 시작하려면 node index.js 만 남겨주세요. index.js을 찾을 수 없다는 오류 메시지가 나타납니다.

파일이 내 프로젝트 폴더에 있는데, 이며 내용이 있습니다. 이 설정이 작동하지 않는 이유를 알 수 없으며 비슷한 설정을 사용하여 제대로 작동합니다.

아무도 내가 여기서 잘못하고있는 것을 말할 수 있습니까?

+0

실행중인 Docker 버전 및 환경은 무엇입니까? Docker VM이 Mac/Win에서 실행될 때 일반적인 볼륨 마운트가 예상대로 일어나지 않는 것 같습니다. – BMitch

+0

@BMitch Windows 10에서 Docker 1.12를 실행합니다. 제안 사항이 있습니까? – Lanbo

답변

1

이 .. 100 % 확실하지 않음 Dockerfile에 있습니다.

기본적으로 충돌하는 볼륨이있는 것 같습니다. 작동 순서 문제입니다. 빌드가 먼저 실행되고 볼륨 탑재가 나중에 컨테이너가 실행될 때 발생하므로 컨테이너에 더 이상 액세스 할 수 없습니다. Dockerfile에 내장 된 파일.

+0

네가 맞아, 그게 다야! 하지만 필자는 그 설정 옵션을 레일 재질에 사용했습니다. 파일을 변경할 때마다 전체 응용 프로그램을 다시 빌드하지 않아도됩니다. 웬일인지 내가 여기서 할 수 없다고 생각해? – Lanbo

+0

변경할 수있는 파일이 Dockerfile에서 빌드 한 파일과 충돌하지 않도록 디렉토리 구조를 설계하면됩니다. 변경 한 파일이 마지막 실행 문에 포함되도록 Dockerfile을 구조화하면 위에 작성된 모든 레이어가 다시 사용되므로 재 빌드가 매우 빨라야합니다. 또한 빌드에서 테스트를 실행하여 도입 된 오류를 확인할 수도 있습니다. 일반적으로 볼륨에 node_module을 저장해야하는 이유가 없어야합니다. 원한다면 하나 또는 두 개의 파일로 링크 할 수도 있지만, 전체 앱이 변경 불가능하거나 자체 포함될 수 있다면 좋을 것입니다. – ldg

0

수동으로

node index.js 

명령을 실행하고 무슨 일이 일어나고 있는지 보려고, 컨테이너에 들어갈

docker exec -it app_1 bash 

를 사용을 시도 할 수 있습니다.

- .:/home/app/cardcreator 

당신이 $HOME/cardcreator/ 내장 어떤의 상단에 장착 예정 다음 '노드'고정 표시기 이미지 bash는 그래도 설치 한 경우 당신은 여기 작성 파일에 장착되어 무엇이든

+0

Docker 명령이 오류와 함께 중단 되었기 때문에 컨테이너가 즉시 중지되고 해당 명령을 실행할 수 없습니다. – Lanbo

관련 문제