Ниже приведено 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
это просто имя службы ... Пожалуйста, уточните