Обеспечение того, чтобы служба БД начиналась с ответного зонда - PullRequest
0 голосов
/ 21 октября 2019

Ниже приведено docker-compose со службой зондов (agent), которая проверяет запущенный контейнер (с именем хоста db), запущенный со службой dbc:

dbc:
  image: mysql:5.6
  hostname: db
  expose:
    - "3306"
  environment:
    MYSQL_DATABASE: somedb
    MYSQL_USER: user1
    MYSQL_PASSWORD: passwd
    MYSQL_ROOT_PASSWORD: passwd

agent:
  image: somehub/ansible
  volumes:
    - ../../ansible/probe.yml:/ansible/site.yml
  links:
    - dbc
  environment:
    PROBE_HOST: "dbc"
    PROBE_PORT: "3306"

где somehub/ansible is:

FROM ubuntu:trusty
MAINTAINER Developer team <developerteam@abc.com>

# Prevent dpkg errors
ENV TERM=xterm-256color

# Set mirrors to CA
RUN sed -i "s/http:\/\/archive./http:\/\/ca.archive./g" /etc/apt/sources.list

# Install ansible
RUN apt-get update -qy && \
    apt-get install -qy software-properties-common && \
    apt-add-repository -y ppa:ansible/ansible && \
    apt-get update -qy && \
    apt-get install -qy ansible

# Add volume for Ansible playbooks
VOLUME /ansible
WORKDIR /ansible

#Entrypoint
ENTRYPOINT ["ansible-playbook"]
CMD ["site.yml"]

и ../../ansible/probe.yml is:

---
- name: Probe Host
  hosts: localhost
  connection: local
  gather_facts: no
  tasks:
  - name: Set facts
    set_fact:
      probe_host: "{{ lookup('env', 'PROBE_HOST') }}"
      probe_port: "{{ lookup('env', 'PROBE_PORT') }}"
      probe_delay: "{{ lookup('env', 'PROBE_DELAY') | default(0, true) }}"
      probe_timeout: "{{ lookup('env', 'PROBE_TIMEOUT') | default(180, true) }}"
  - name: Message
    debug:
      msg: >
        Probing {{ probe_host }}:{{ probe_port }} with delay={{ probe_delay }}s
        and timeout={{ probe_timeout }}s
  - name: Waiting for host to respond...
    local_action: >
      wait_for host={{ probe_host }}
      port={{ probe_port }}
      delay={{ probe_delay }}
      timeout={{ probe_timeout }}

Вышеуказанная настройка работает, только когда PROBE_HOST равен "dbc" в docker-compose.

Я ожидаю, что это будет PROBE_HOST: "db", потому что имя хоста контейнера, на котором работает MySQL: db


$ docker-compose version
docker-compose version 1.24.1, build 4667896b
docker-py version: 3.7.3
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018

Почему PROBE_HOST должно быть "dbc" но не "db"? Потому что dbc это просто имя службы ... Пожалуйста, уточните

1 Ответ

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

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

вы пытались указать версию docker-compose, а также добавить сеть в файл compose?

Если они не работают, возможно, попробуйте использовать псевдоним, например: (см. Официальную ссылку на документ ниже).

version: "3.7"
services:
  web:
    image: "nginx:alpine"
    networks:
      - new
  dbc:
    image: mysql
    networks:
      new:
        aliases:
          - database
      legacy:
        aliases:
          - db

networks:
  new:

checkout https://docs.docker.com/compose/compose-file/#aliases

...