当前位置: 首页 > 知识库问答 >
问题:

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

狄峰
2023-03-14

我是docker的新手,正在努力使用docker compose连接两个独立的服务。我需要能够写入数据库并从中读取。此外,还需要从每个容器中ping另一个容器。

我做了docker exec-ti node app ping mongo,一切正常。我执行docker exec-ti mongo ping节点应用程序,并得到以下错误:

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

此外,当我启动docker-compose时,我有以下错误:服务器正在运行... node-app|{MongoNetworkError:在第一次连接时未能连接到服务器[mongo: 27017][MongoNetworkError:连接ECONNREFUSED172.21.0.3:27017]

docker编写

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

文档文件

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

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个答案

姜宏盛
2023-03-14

我只是找到了答案<代码>mongo容器没有ping。所以我进入了这个容器,并进行了apt更新和apt安装iputils ping。然后,我可以从两侧对容器进行ping操作。

欧阳君浩
2023-03-14

首先执行容器并检查是否可以ping其他容器

docker exec -i -t 665b4a1e17b6 bash

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

ping 35.158.153.133

如果ping不起作用,你必须安装它,使用这个链接,他们已经在讨论了。

如果你的ping有效,那么你知道你可以联系其他服务。然后,您可以开始对服务进行故障排除。

 类似资料:
  • 问题内容: TL; DR:为了允许一个容器通过自定义(非标准)端口使用另一个容器的服务,我必须如何更改以下内容? 我有一个非常普通的设置:Web应用程序的容器(Padrino [Ruby]),Postgres,Redis和一个排队框架(Sidekiq)。该Web应用程序带有其自定义的Dockerfile,其余服务来自标准映像(Postgres,Redis),或从Web应用程序装载数据(Sideki

  • 问题内容: 我有一些运行如下的Docker容器: Nginx的 网路应用程式1 网路应用程式2 PostgreSQL的 由于Nginx需要连接到Web应用程序1和2中的Web应用程序服务器,并且Web应用程序需要与PostgreSQL通讯,所以我有这样的链接: Nginx —链接—> Web应用程序1 Nginx —链接—> Web应用程序2 Web应用程序1 —链接—> PostgreSQL W

  • 我有一个网站,我托管在Shopify中的,然后我通过Angular制作了一个GET到一个网站。 有棱角的 局部结果 做得很好 我一直得到 拒绝连接到http://d.biossusa.com/api/distributor?key= ******' ,因为它违反了以下内容安全策略指令:"连接-src'自我'https://*wss://*"。 将我的API站点从HTTP转换为HTTPS可能有点昂贵

  • 我有一个dockerized应用程序,其中有几个服务使用Docker-Compose运行。我想使用另一个docker-compose应用程序docker-elk将这个应用程序与elasticsearch/logstash/kibana(ELK)连接起来。两者都运行在开发中的同一台docker机器中。在生产中,情况可能就不是这样了。 如何配置应用程序的链接到ELK堆栈?

  • 问题内容: 有没有一种方法可以定义Docker Compose服务,使其仅在您明确请求时才提供? 也就是说: 不会启动它,但是 将。 问题答案: 一种实现方法是在其他撰写文件中定义可选服务。然后启动可选服务,运行: 例如,如果我有一个docker-compose.yml文件,看起来像: 我可以使用一个类似于以下内容的optional-service.yml对其进行扩展: 请注意,两个撰写文件必须使

  • 我用go语言写了个websocket,但如何实现100万连接,并且部署在多台服务器,连接与连接之间可以互相通信 我用go语言写了个websocket,但如何实现100万连接,并且部署在多台服务器,连接与连接之间可以互相通信?