2016-11-13 7 views
1

В Dockerfile для моего приложения выглядит следующим образомDocker Контейнер Не удалось запустить

   # Tells the Docker which base image to start. 
       FROM node 

       # Adds files from the host file system into the Docker container. 
       ADD . /app 

       # Sets the current working directory for subsequent instructions 
       WORKDIR /app 

       RUN npm install 
       RUN npm install -g bower 
       RUN bower install --allow-root 
       RUN npm install -g nodemon 

       #expose a port to allow external access 
       EXPOSE 9000 9030 35729 

       # Start mean application 
       CMD ["nodemon", "server.js"] 

докер-compose.yml файл выглядит следующим образом

      web: 
           build: . 
           links: 
              - db 
            ports: 
              - "9000:9000" 
              - "9030:9030" 
              - "35729:35729" 
            db: 
              image: mongo:latest 
              ports: 
                - "27017:27017" 

и ошибка генерируется во время работы выглядит следующим образом: -

web_1 | [nodemon] 1.11.0 
    web_1 | [nodemon] to restart at any time, enter `rs` 
    web_1 | [nodemon] watching: *.* 
    web_1 | [nodemon] starting `node server.js` 
    web_1 | Server running at http://127.0.0.1:9000 
    web_1 | Server running at https://127.0.0.1:9030 
    web_1 | 
    web_1 | /app/node_modules/mongodb/lib/server.js:261 
    web_1 |   process.nextTick(function() { throw err; }) 
    web_1 |          ^
    web_1 | MongoError: failed to connect to server [localhost:27017] on first connect 
    web_1 |  at Pool.<anonymous> (/app/node_modules/mongodb-core/lib/topologies/server.js:313:35) 
    web_1 |  at emitOne (events.js:96:13) 
    web_1 |  at Pool.emit (events.js:188:7) 
    web_1 |  at Connection.<anonymous> (/app/node_modules/mongodb-core/lib/connection/pool.js:271:12) 
web_1 |  at Connection.g (events.js:291:16) 
web_1 |  at emitTwo (events.js:106:13) 
web_1 |  at Connection.emit (events.js:191:7) 
web_1 |  at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:165:49) 
web_1 |  at Socket.g (events.js:291:16) 
web_1 |  at emitOne (events.js:96:13) 
web_1 |  at Socket.emit (events.js:188:7) 
web_1 |  at emitErrorNT (net.js:1281:8) 
web_1 |  at _combinedTickCallback (internal/process/next_tick.js:74:11) 
web_1 |  at process._tickCallback (internal/process/next_tick.js:98:9) 
web_1 | [nodemon] app crashed - waiting for file changes before starting... 

Я загрузил изображение для моего приложения на DockerHub как crissi/airlineInsurance.

ответ

0

В докере вы не можете подключиться к другому контейнеру через localhost, потому что каждый контейнер является независимым и имеет свой собственный IP-адрес. Вы должны использовать container_name:port. В вашем примере это должно быть db:27017 для подключения вашего приложения NodeJS в 'web' к MongoDB в 'db'.

Так что это не проблема вашего Dockerfile. Это URL-адрес соединения из вашего приложения NodeJS, который указывает на localhost вместо db.

+0

Я изменил свой файл конфигурации для приложения. Вышеупомянутая проблема с базой данных решена. Но приложение не будет загружено на порты 9000,9030. – cmr

+0

Я думаю, вы используете Boot2Docker. Boot2Docker имеет собственный IP-адрес, потому что это виртуальная машина. Вы можете использовать переадресацию портов, например [здесь] (https://stackoverflow.com/questions/28403341/boot2docker-access-webserver-as-localhost#28405278), или вы можете получить IP-адрес Boot2Docker с помощью 'docker inspect $ (docker ps - q) | grep IPA' и использовать его как Boot2DockerIP: порт, поскольку порт перенаправляется в Boot2Docker. – Piu130

Смежные вопросы