2016-12-20 2 views
0

Я сделал два 2 контейнера, один для RethinkDB и один для приложения nodejs.Ссылка nodejs app на Rethinkdb из другого контейнера

Я хочу подключить nodejs приложение к этому RethinkDB, но каждый раз, когда я пытаюсь получить ошибку

Error:{"message":"Failed to connect to localhost:58015\nFull error:\n{\"code\":\"ECONNREFUSED\"

Но я могу подключить же nodejs приложение работает без Докер к RethinkDB, с открытым портом (58015) ,

Мои Docker сочинить конфигурации выглядеть следующим образом

# Rethink DB 
rethink: 
    build: docker/rethinkdb 
    container_name: rethink 
    ports: 
    - 58080:8080 
    - 58015:28015 
    - 59015:29015 

# NodeJS 
nodejs: 
    build: docker/nodejs 
    container_name: nodejs 
    ports: 
    - 53000:3000 
    - 55000:5000 
    depends_on: 
    - rethink 

Чтобы подключить мое приложение к БД я установить хост и порт внутри конфигурационного файла JS

database: { 
    servers: [ 
     { 
      host: process.env.DB_PORT_28015_TCP_ADDR || 'localhost', 
      port: process.env.DB_PORT_28015_TCP_PORT || 28015 
     } 
    ], 
    name: 'atlas' 
}, 

Я попытался с портом RethinkDB (28015) и с моим открытым портом (58015) без успеха.

Я попытался связать эти два контейнера с links, network_mode, без успеха тоже.

Каждое решение, которое я пробовал, не работает.

Я думаю, что мой контейнер Rethink не готов, когда приложение nodejs попытается подключиться. Я действительно не понимаю проблему, если это не так. Приложение nodejs работает с pm2

Как я могу подключить это приложение к моему db?

+1

Вы пытались соединиться с адресом: переосмысление и порт: 28015? – Lauri

+0

Нет, и теперь это работает. Спасибо –

ответ

0

Насколько я знаю, один контейнер Докер не будет видеть другого, если специально не связаны и с использованием той же сети:

docker run \ 
    --name ${NEWAPP} \ 
    --restart=always \ 
    --env MYAPPPAR=${PROJ} \ 
    -v /var/log/docker/node/logs:/usr/src/app/log \ 
    --link myapp_rethink_1:myapp_rethink_1 \ 
    --net myapp_default \ 
    -p ${PORT}:9000 \ 
    -d ${NEWAPP} 

Так что вам нужно как --net и --link:

  • --link формат sourcecontainername: containeraliasname
  • --net так, что контейнеры могут найти друг друга с внутренним DNS/прод ainername. Вы можете проверить сеть с «докер сети LS»
+0

Я знаю, и я пробовал, но поскольку docker составляет файл 2, каждый контейнер находится в одной сети ('project_default'), а ссылка устарела, поэтому я использую' depend_on'. Проблема заключалась в подключении хоста. –

1

Для вас конфигурации, вы должны использовать # Rethink DB rethink: build: docker/rethinkdb container_name: rethink ports: - 58080:8080 - 58015:28015 - 59015:29015 # NodeJS nodejs: build: docker/nodejs container_name: nodejs ports: - 53000:3000 - 55000:5000 links: - rethink depends_on: - rethink

и JS код database: { servers: [ { host: process.env.DB_PORT_28015_TCP_ADDR || 'rethink', port: process.env.DB_PORT_28015_TCP_PORT || 28015 } ], name: 'atlas' },

0

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

Название службы верхнего уровня в вашем «докере-сочинении».YML»станет хозяином, который должен быть указан, при подключении к RethinkDB из приложения:

# docker-compose.yml 

    version: '3.2' 
    Services: 
     web: 
     build: . 
     links: db 
     ... 
     db: 
     image: rethinkDB 
     ... 

Используя пример выше, вы можете подключиться к RethinkDB с помощью хоста с именем„БД“, в конфигурации приложения файл:

module.exports = { 
     rethinkdb: { 
     host: 'db', 
     port: 28015 
    } 
    }; 

 Смежные вопросы

  • Нет связанных вопросов^_^