#docker-compose #docker-swarm #portainer
#docker-compose #docker-swarm #portainer
Вопрос:
Как вы можете найти ниже из файла docker-compose.yml, который размещен в стеке Portainer в режиме Docker-Swarm. Контейнеры в Portainer работают нормально, но похоже, что lamp-сервер не может связаться с Redis и выдает следующую ошибку:
(node:1) UnhandledPromiseRejectionWarning: Error: getaddrinfo ENOTFOUND cache
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26)
Вот моя конфигурация:
version: '3.7'
services:
server:
image: 'bidmcdigitalpsychiatry/lamp-server:latest'
environment:
- HTTPS=off
- SCHEDULER=on
- ROOT_KEY=xxxx
- CDB=http://admin:xxxx@database:5984/
- PUSH_API_GATEWAY=xxxx
- PUSH_API_KEY=xxxx
- REDIS_HOST=redis://cache:6379/0
- NATS_SERVER=message_queue:4222
networks:
- public
deploy:
mode: replicated
labels:
traefik.enable: 'true'
traefik.http.routers.lamp_server.entryPoints: 'websecure'
traefik.http.routers.lamp_server.rule: 'Host(`api.example.com`)'
traefik.http.routers.lamp_server.tls.certresolver: 'default'
traefik.http.services.lamp_server.loadbalancer.server.port: 3000
placement:
constraints:
- node.role == manager
database:
image: apache/couchdb:latest
volumes:
- /home/azureuser/data/couchdb:/opt/couchdb/data
networks:
- public
environment:
- COUCHDB_USER=admin
- COUCHDB_PASSWORD=xxxxx
deploy:
mode: replicated
labels:
traefik.enable: 'true'
traefik.http.routers.lamp_db.entryPoints: 'websecure'
traefik.http.routers.lamp_db.rule: 'Host(`db.example.com`)'
traefik.http.routers.lamp_db.tls.certresolver: 'default'
traefik.http.services.lamp_db.loadbalancer.server.port: 5984
placement:
constraints:
- node.role == manager
cache:
image: redis:6.0.8-alpine
healthcheck:
test: redis-cli ping
deploy:
mode: replicated
update_config:
order: stop-first
failure_action: rollback
placement:
constraints:
- node.role == manager
message_queue:
image: nats:2.1.9-alpine3.12
healthcheck:
test: wget --no-verbose --tries=1 --spider http://localhost:8222/varz || exit 1
deploy:
mode: replicated
update_config:
order: start-first
failure_action: rollback
placement:
constraints:
- node.role == manager
networks:
public:
external: true
Есть идеи, как решить эту проблему?
Ответ №1:
Ваша серверная служба находится в общедоступной сети и не может видеть другие службы. Вы можете исправить это, просто добавив частную сеть, например:
networks:
private:
public:
external: true
И использовать его в других службах:
services:
server:
...
networks:
- private
- public
cache:
...
networks:
- private
...
Комментарии:
1. Большое спасибо за ваше предложение. Я пытался внести эти изменения, пожалуйста, смотрите Здесь pastebin.com/65xMK9wF но я все еще получаю следующую ошибку (узел: 1) с предупреждением о необработанном promiserejectionwarning: Ошибка: getaddrinfo НЕ НАЙДЕН кэш в GetAddrInfoReqWrap.onlookup [как завершенный] (dns.js:67:26)
2. Получаете ли вы его после полной очистки и полного перезапуска?
3. Ваше право. Я сделал серверную сеть частной и общедоступной, и теперь ошибка исчезла. Большое вам спасибо, есть ли место, где я могу узнать об этих сетях, например, официальную документацию docker?
4. Тогда, пожалуйста, примите ответ. Вы можете попробовать katacoda katacoda.com/courses/docker-orchestration На github есть много курсов и лабораторий udemy, если вы поищете. Удачи!