Docker容器无法运行

时间:2016-11-13 12:38:10

标签: docker dockerfile

我的应用程序的Dockerfile如下

               # 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"]

docker-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。

1 个答案:

答案 0 :(得分:0)

在docker中,您无法通过localhost连接到其他容器,因为每个容器都是独立的并且拥有自己的IP。您应该使用container_name:port。在您的示例中,应该db:27017从您的NodeJS应用程序连接到&#39; web&#39;在&#39; db&#39;中的MongoDB。

所以这不是你的Dockerfile的问题。它是NodeJS应用程序中指向localhost而不是db的连接URL。