diff --git a/Dockerfile b/Dockerfile index 84960f2..86cd6f5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,9 @@ -FROM alpine:3.6 -MAINTAINER Feng Honglin +FROM alpine:3.8 COPY . /haproxy-src RUN apk update && \ - apk --no-cache add tini haproxy py-pip build-base python-dev ca-certificates && \ + apk --no-cache add haproxy py-pip build-base python-dev ca-certificates && \ cp /haproxy-src/reload.sh /reload.sh && \ cd /haproxy-src && \ pip install -r requirements.txt && \ @@ -26,5 +25,4 @@ ENV RSYSLOG_DESTINATION=127.0.0.1 \ NBPROC=1 EXPOSE 80 443 1936 -ENTRYPOINT ["/sbin/tini", "--"] CMD ["dockercloud-haproxy"] diff --git a/haproxy/__init__.py b/haproxy/__init__.py index 64206c4..2382cc1 100644 --- a/haproxy/__init__.py +++ b/haproxy/__init__.py @@ -1 +1 @@ -__version__ = "1.6.7" +__version__ = "1.6.8" diff --git a/haproxy/helper/compose_mode_link_helper.py b/haproxy/helper/compose_mode_link_helper.py index 1eb27b3..4cb2cbe 100644 --- a/haproxy/helper/compose_mode_link_helper.py +++ b/haproxy/helper/compose_mode_link_helper.py @@ -10,7 +10,9 @@ def get_compose_mode_links(docker, haproxy_container): raise Exception("Cannot read compose labels. Are you using docker compose V2?") networks = haproxy_container.get("NetworkSettings", {}).get("Networks", {}) - linked_compose_services = _get_linked_compose_services(networks, project) + compose_labels = haproxy_container.get("Config", {}).get("Labels", {}) + has_slug = compose_labels.get("com.docker.compose.slug", "") != "" + linked_compose_services = _get_linked_compose_services(networks, project, has_slug) links = _calc_links(docker, linked_compose_services, project) return links, set(["%s_%s" % (project, service) for service in linked_compose_services]) @@ -95,7 +97,7 @@ def get_container_envvars(container): return container_evvvars -def _get_linked_compose_services(networks, project): +def _get_linked_compose_services(networks, project, has_slug): prefix = "%s_" % project prefix_len = len(prefix) @@ -112,6 +114,11 @@ def _get_linked_compose_services(networks, project): if service and service.startswith(prefix): last = service.rfind("_") linked_service = service[prefix_len:last] + # The default naming scheme for containers created by Compose in has changed in 1.23.0 + # from __ to ___, + # where is a randomly-generated hexadecimal string. + if has_slug: + linked_service = linked_service[0:linked_service.rfind("_")] if linked_service not in linked_services: linked_services.append(linked_service) return linked_services diff --git a/requirements.txt b/requirements.txt index de2d3e0..f515ad7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,15 +1,15 @@ -PyYAML==3.11 +PyYAML==3.13 cached-property==1.2.0 -docker-py==1.10.3 +docker==3.5.0 dockerpty==0.4.1 -docopt==0.6.1 +docopt==0.6.2 enum34==1.0.4 jsonschema==2.5.1 -texttable==0.8.4 -future==0.15.0 -requests==2.7.0 +texttable==0.9.1 +future==0.16.0 +requests==2.18.4 six==1.9.0 websocket-client==0.37.0 -docker-compose==1.6.0 -python-dockercloud==1.0.10 +docker-compose==1.22.0 +python-dockercloud==1.0.12 gevent==1.1.1 diff --git a/tests/unit/helper/test_compose_mode_helper.py b/tests/unit/helper/test_compose_mode_helper.py index 0bace41..9973f24 100644 --- a/tests/unit/helper/test_compose_mode_helper.py +++ b/tests/unit/helper/test_compose_mode_helper.py @@ -361,9 +361,9 @@ def test_get_container_envvars(self): def test_get_link_compose_services(self): services = [u'hello', u'world'] - self.assertEqual(services, _get_linked_compose_services(container1["NetworkSettings"]["Networks"], 'tmp')) + self.assertEqual(services, _get_linked_compose_services(container1["NetworkSettings"]["Networks"], 'tmp', False)) - self.assertEqual([], _get_linked_compose_services(container1["NetworkSettings"]["Networks"], '')) + self.assertEqual([], _get_linked_compose_services(container1["NetworkSettings"]["Networks"], '', False)) def test_get_service_links_str(self): self.assertEqual([u'tmp_hello', u'tmp_world'], get_service_links_str(links))