Как я могу создать соединение между двумя службами в docker-compose, чтобы они могли пинговать друг друга? - PullRequest
0 голосов
/ 08 октября 2019

Я новичок в докере и борюсь с подключением двух отдельных сервисов с помощью docker-compose. Мне нужно иметь возможность писать в базу данных и читать из нее. Также необходимо ping из каждого контейнера в другой.

Я делаю docker exec -ti node-app ping mongo и все в порядке. Я делаю docker exec -ti mongo ping node-app и получаю эту ошибку:

Ошибка выполнения OCI во время выполнения: ошибка exec: container_linux.go: 348: запуск процесса контейнера вызвал "exec: \" ping \ ": исполняемый файл не найденв $ PATH ": неизвестно

Кроме того, при запуске docker-compose появляется следующая ошибка: Сервер работает ... node-app |{MongoNetworkError: не удалось подключиться к серверу [mongo: 27017] при первом подключении [MongoNetworkError: connect ECONNREFUSED 172.21.0.3: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 голосов
/ 08 октября 2019

Я просто нахожу ответ. mongo контейнер не имеет ping. Поэтому я вошел в этот контейнер и сделал apt update и apt install iputils-ping. Тогда я смог ping контейнеры с обеих сторон.

0 голосов
/ 08 октября 2019

first exec контейнер и проверьте, можете ли вы пропинговать другой контейнер

docker exec -i -t 665b4a1e17b6 bash

, затем в этом контейнере пропингуйте IP-адрес другого сервиса

ping 35.158.153.133

if pingне работает, вам придется его установить, используйте эту ссылку , они уже обсуждают это.

если ваш пинг работает, то вы знаете, что можете связаться с другой службой. тогда вы можете начать устранение неполадок в вашем сервисе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...