3

fig用来部署我的Node.js应用程序。

fig.yml

web:
  build: .
  command: node app.js
  links:
   - db
  ports:
   - "1337:1337"

db:
  image: dockerfile/mongodb

运行fig run db env给了我以下环境变量:

DB_PORT=tcp://172.17.0.29:27017
DB_PORT_27017_TCP=tcp://172.17.0.29:27017
DB_PORT_27017_TCP_ADDR=172.17.0.29
DB_PORT_27017_TCP_PORT=27017
DB_PORT_27017_TCP_PROTO=tcp
DB_PORT_28017_TCP=tcp://172.17.0.29:28017
DB_PORT_28017_TCP_ADDR=172.17.0.29
DB_PORT_28017_TCP_PORT=28017
DB_PORT_28017_TCP_PROTO=tcp
DB_NAME=/pos_db_run_3/db

我的应用Dockerfile看起来像这样

# Pull base image.
FROM dockerfile/nodejs

# install mongo client
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/mongodb.list

RUN apt-get update
RUN apt-get install -y dnsutils
RUN apt-get install -y mongodb-org-shell

# copy the source files into the image
COPY . /data/myapp

# Define working directory.
WORKDIR /data/myapp

# Install dependencies
RUN npm install

# Create default database and user
RUN mongo $DB_PORT < seed-mongo

RUN node/seed.js

EXPOSE 1337

# Define default command.
CMD ["bash"]

但是构建失败了RUN mongo $DB_PORT < seed-mongo

MongoDB shell version: 2.6.5
connecting to: test
2014-11-20T20:47:59.193+0000 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2014-11-20T20:47:59.195+0000 Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed at src/mongo/shell/mongo.js:146
exception: connect failed
Service 'web' failed to build: The command [/bin/sh -c mongo $DB_PORT < seed-mongo] returned a non-zero code: 1

根据无花果文档,我最好像db我尝试过的那样简单地引用数据库

RUN mongo db < seed-mongo

但这给了我

MongoDB shell version: 2.6.5
connecting to: db
2014-11-20T21:08:11.154+0000 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2014-11-20T21:08:11.156+0000 Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed at src/mongo/shell/mongo.js:146
exception: connect failed

所以我RUN host db在那里注入了一个,只是为了看看是否db真的是一个主机名。不,尽管上面的文档不是。

Step 10 : RUN host db
 ---> Running in 73b4dc787c79
Host db not found: 3(NXDOMAIN)
Service 'web' failed to build: The command [/bin/sh -c host db] returned a non-zero code: 1

所以我很难过。

我应该如何与在我的链接容器中mongo运行的实例交谈?Docker

4

3 回答 3

3

你的 mongo 容器有 IP 地址 $DB_PORT_27017_TCP_ADDR
所以尝试mongo --host $DB_PORT_27017_TCP_ADDR < seed-mongo
你不能在我认为的 RUN 语句中使用它,因为环境变量在构建时不可用。我猜你可以尝试在 CMD 中使用它。

于 2014-11-21T08:44:23.800 回答
1

我的解决方案是结合了上面的见解,但主要是我停止尝试在构建阶段为特定数据库和数据库用户播种,而是--host db_1在没有用户名或密码的情况下使用。如果我以后真的需要那个功能,我会解决的。

然后我可以构建项目并将其连接到mongo另一个图像中。

在我的config/connections.js我包括:

development: {
  adapter  : 'sails-mongo',
  host     :  'db_1',
  port     :  27017,
  user     :  '',
  password :  '',
  database :  process.env.DB_NAME
},

我改变CMD"node data/seeds.js && node app"

于 2014-11-24T09:54:53.803 回答
0

你从来没有暴露你的 Mongo 端口。

web:
  build: .
  command: node app.js
  links:
   - db
  ports:
   - "1337:1337"

db:
  image: dockerfile/mongodb
  ports:
    - "27017:27017"
于 2014-11-24T17:30:55.133 回答