首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能用集装箱码头连接蒙戈。

我不能用集装箱码头连接蒙戈。
EN

Stack Overflow用户
提问于 2017-10-22 11:28:13
回答 4查看 2.6K关注 0票数 2

我是新手,所以我跟进了一个教程这里,第6、7和8部分,以便在一个项目中使用和学习docker。

问题是,当我使用docker-come.yml在我的笔记本电脑上构建图像时,我的stack_server可以连接到mongo。

,但是如果我从码头集线器生成图像,然后在我的笔记本电脑上单独拉并运行它们,我的stack_server就无法连接到mongo.

这是我的船坞-复合。here:

代码语言:javascript
复制
client:
    build: ./client
    restart: always
    ports:
      - "80:80"
    links:
      - server
mongo:
  image: mongo
  command: --smallfiles
  restart: always
  ports:
    - "27017:27017"
server:
    build: ./server
    restart: always
    ports:
     - "8080:8080"
    links:
     - mongo

但是,我的stack_client可以连接到stack_server。

和我的命令运行我的形象(我的图像是公开的)

代码语言:javascript
复制
docker-run -i -t -p 27017:27017 mongo
docker-run -i -t -p 80:80 mik3fly4steri5k/stack_client 
docker-run -i -t -p 8080:8080 mik3fly4steri5k/stack_server

和我的错误日志

代码语言:javascript
复制
bryan@debian-dev7:~$ sudo docker run -i -t -p 8080:8080 mik3fly4steri5k/stack_server
[sudo] password for bryan: 
Express server listening on 8080, in development mode
connection error: { Error: connect ECONNREFUSED 127.0.0.1:27017
    at Object._errnoException (util.js:1021:11)
    at _exceptionWithHostPort (util.js:1043:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1175:14)
  name: 'MongoError',
  message: 'connect ECONNREFUSED 127.0.0.1:27017' }

这是我的stack_server文件

代码语言:javascript
复制
FROM node:latest

# Set in what directory commands will run
WORKDIR /home/app

# Put all our code inside that directory that lives in the container
ADD . /home/app

# Make sure NPM is not cached, remove everything first
RUN rm -rf /home/app/node_modules/npm \
 && rm -rf  /home/app/node_modules

# Install dependencies
RUN npm install

# Tell Docker we are going to use this port
EXPOSE 8080

# The command to run our app when the container is run
CMD ["node", "app.js"]

第一种解决办法但不可取

代码语言:javascript
复制
docker-run -i -t -p 27017:27017 --name:mongo mongo
docker-run -i -t -p 80:80 mik3fly4steri5k/stack_client 
docker-run -i -t -p 8080:8080 --link mongo:mongo mik3fly4steri5k/stack_server

我必须在我的mongo上加上一个名字,并在运行我的stack_server时将它与参数链接起来。

码头文件

代码语言:javascript
复制
Warning: The --link flag is a deprecated legacy feature of Docker. 
It may eventually be removed. 
Unless you absolutely need to continue using it,
we recommend that you use user-defined networks to facilitate communication 
between two containers instead of using --link.
One feature that user-defined networks do not support that you can do with 
--link is sharing environmental variables between containers.
However, you can use other mechanisms such as volumes to share environment 
variables between containers in a more controlled way.
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-10-22 12:19:39

使用以下命令运行您的stack_server

代码语言:javascript
复制
sudo docker run -i -t -p 8080:8080 --link mongo:mongo mik3fly4steri5k/stack_server

注:

票数 2
EN

Stack Overflow用户

发布于 2017-10-22 14:51:13

你的集装箱在运行。但它健康吗?我建议您实现Healthcheck

实际上它看起来差不多:()

代码语言:javascript
复制
healthcheck:
  test: curl -sS http://127.0.0.1:8080 || echo 1
  interval: 5s
  timeout: 10s
  retries: 3

Docker健康检查是一个可爱的小功能,它允许将shell命令附加到容器,并使用它来检查容器的内容是否足够活跃。

我希望它能帮到你。

更多信息https://docs.docker.com/compose/compose-file/compose-file-v2/#healthcheck

票数 1
EN

Stack Overflow用户

发布于 2017-10-22 12:08:53

要在愿望端口上启动MongoDB,您必须执行以下操作:

代码语言:javascript
复制
client:
    build: ./client
    restart: always
    ports:
      - "80:80"
    links:
      - server
mongo:
  image: mongo
  command: mongod --port 27017
  restart: always
  ports:
    - "27017:27017"
server:
    build: ./server
    restart: always
    ports:
     - "8080:8080"
    links:
     - mongo
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46873527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档