我如何在docker-compose中的两个服务之间创建连接,以便它们可以相互ping通?

时间:2019-10-08 11:39:39

标签: node.js mongodb docker docker-compose

我是Docker的新手,正在努力使用docker-compose连接两个单独的服务。我需要能够在数据库中写入数据并从中读取数据。另外,有必要从每个容器中分别ping

我做了docker exec -ti node-app ping mongo,一切都还好。 我做了docker exec -ti mongo ping node-app并收到此错误:

OCI运行时exec失败:exec失败:container_linux.go:348:启动容器进程导致“ exec:\“ ping \”:在$ PATH中找不到可执行文件”:未知

此外,当我启动docker-compose时,出现以下错误: 服务器正在运行... 节点应用| {MongoNetworkError:首次连接[MongoNetworkError:连接ECONNREFUSED 172.21.0.3:27017]时,无法连接到服务器[mongo:27017]

docker-compose

version: '3'
services:
  app:
    container_name: node-app
    restart: always
    build: .
    ports:
      - '80:3000'
    networks:
      - net
  mongo:
    container_name: mongo
    image: mongo
    restart: always
    ports:
      - 27017:27017
    networks:
      - net
networks:
  net:
    driver: bridge

Dockerfile

FROM node:10

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 35.158.153.133/80 # my aws public ip address

CMD ["npm", "start"]

index.js

mongoose
  .connect(
    'mongodb://mongo:27017/mongo',
    { useNewUrlParser: true }
  )
  .then(() => console.log('MongoDB Connected'))
  .catch(err => console.log(err));

const Item = require('./models/Item');

app.get('/', (req, res) => {
  Item.find()
    .then(items => res.render('index', { items }))
    .catch(err => res.status(404).json({ msg: 'No items found' }));
});

app.post('/item/add', (req, res) => {
  const newItem = new Item({
    name: req.body.name
  });

  newItem.save().then(item => res.redirect('/'));
});


2 个答案:

答案 0 :(得分:0)

首先exec一个容器,并检查是否可以ping其他容器

docker exec -i -t 665b4a1e17b6 bash

然后在该容器中ping其他服务的IP地址

ping 35.158.153.133

如果ping不起作用,则必须安装它,并使用此link他们已经在讨论它了。

如果您的ping正常,则您可以联系其他服务。然后即可开始对服务进行故障排除。

答案 1 :(得分:0)

我刚刚找到答案。 mongo容器没有ping。因此,我进入了该容器并进行了apt updateapt install iputils-ping的操作。然后,我可以从两边ping起放置容器。