Какое имя (если возможно) я могу использовать по сетям Docker для контейнеров? - PullRequest
0 голосов
/ 06 января 2019

Использование Docker с Rancher v1.6 и использование phpMyAdmin внутри контейнера, с его собственным стеком, создающим сеть с именем db-admin, и даже когда я добавляю псевдоним для каждого из контейнеров MySQL, я хотел бы иметь возможность для доступа их псевдоним не разрешается на IP-адрес контейнера.

Пример

docker-compose.yml (Gogs):

version: '2'

services:
  gogs:
    image: gogs/gogs:latest
    dns:
      - 1.1.1.1
      - 1.0.0.1
    environment:
      RUN_CROND: true
      SOCAT_LINK: false # Being used inside of Rancher
    labels:
      io.rancher.container.pull_image: always
      {{- if .Values.HOST_LABEL}}
      io.rancher.scheduler.affinity:host_label: ${HOST_LABEL}
      {{- end}}
      {{- if .Values.TRAEFIK_HOST}}
      traefik.enable: true
      ### Start SSH Segment
      traefik.ssh.frontend.entryPoints: ssh
      traefik.ssh.frontend.headers.forceSTSHeader: true
      traefik.ssh.frontend.headers.SSLRedirect: true
      traefik.ssh.frontend.headers.STSPreload: true
      traefik.ssh.frontend.headers.STSSeconds: 15552000
      traefik.ssh.frontend.rule: Host:${TRAEFIK_HOST}
      traefik.ssh.port: "22"
      ### End SSH Segment
      ### Start Web Segment
      traefik.web.frontend.entryPoints: http,https
      traefik.web.frontend.headers.forceSTSHeader: true
      traefik.web.frontend.headers.SSLRedirect: true
      traefik.web.frontend.headers.STSPreload: true
      traefik.web.frontend.headers.STSSeconds: 15552000
      traefik.web.frontend.rule: Host:${TRAEFIK_HOST}
      traefik.web.port: "3000"
      ### End Web Segment
      {{- else}}
      traefik.enable: false
      {{- end}}
    links:
      - mysql
    networks:
      - public-proxy
    ports:
      - "${SSH_PORT}:22"
      - "${WEB_PORT}:3000"
    restart: on-failure
    volumes:
      - /etc/localtime:/etc/localtime:ro # Syncronize time of container with the host system
      - /etc/timezone:/etc/timezone:ro # Syncronize timezone of container with the host system
      - /RancherCattle/${DATA_DIR}/Data:/data
  mysql:
    image: mysql:5
    dns:
      - 1.1.1.1
      - 1.0.0.1
    environment:
      MYSQL_DATABASE: gogs # Will eventually rename this to "gogs_db"
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
      MYSQL_USER: gogs_user
      MYSQL_PASSWORD: ${DB_USER_PASS}
    labels:
      io.rancher.container.pull_image: always
      {{- if .Values.HOST_LABEL}}
      io.rancher.scheduler.affinity:host_label: ${HOST_LABEL}
      {{- end}}
    networks:
      db-admin:
        aliases:
          - gogs
    restart: on-failure
    volumes:
      - /etc/localtime:/etc/localtime:ro # Syncronize time of container with the host system
      - /etc/timezone:/etc/timezone:ro # Syncronize timezone of container with the host system
      - /RancherCattle/${DATA_DIR}/Database:/var/lib/mysql

networks:
  db-admin:
    external: true
  public-proxy:
    external: true

(Кстати, точка входа SSH не работает ... это другой вопрос XD)

docker-compose.yml (phpMyAdmin):

version: '2'

services:
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    dns:
      - 1.1.1.1
      - 1.0.0.1
    environment:
      PMA_ARBITRARY: 1 # Allows the user to specify any arbitrary server using address/hostname and port
    labels:
      io.rancher.container.pull_image: always
      {{- if .Values.HOST_LABEL}}
      io.rancher.scheduler.affinity:host_label: ${HOST_LABEL}
      {{- end}}
      {{- if .Values.TRAEFIK_HOST}}
      traefik.enable: true
      ### Start Web Segment
      traefik.web.frontend.entryPoints: http,https
      traefik.web.frontend.headers.forceSTSHeader: true
      traefik.web.frontend.headers.SSLRedirect: true
      traefik.web.frontend.headers.STSPreload: true
      traefik.web.frontend.headers.STSSeconds: 15552000
      traefik.web.frontend.redirect.entryPoint: https
      traefik.web.frontend.redirect.permanent: true
      traefik.web.frontend.rule: Host:${TRAEFIK_HOST}
      traefik.web.port: "80"
      ### End Web Segment
      {{- else}}
      traefik.enable: false
      {{- end}}
    networks:
      - db-admin # Used to be able to make secure, direct connections to other services in other stacks
      - public-proxy # Used for the connection to the Traefik container for public access
    ports:
      - "${WEB_PORT}:80"
    restart: on-failure

networks:
  db-admin:
  public-proxy:
    external: true

Я ожидал, что просто смогу использовать «gogs» в поле имени хоста, чтобы phpMyAdmin мог ссылаться на контейнер MySQL Gogs, но phpMyAdmin отображает ошибку, сообщающую, что он не может разрешить имя. Я могу использовать IP-адрес контейнера (как показано в интерфейсе Rancher v1.6), но хотел бы иметь «более простой» способ ссылки на него, если это возможно.

Спасибо!

1 Ответ

0 голосов
/ 07 января 2019

Имена сервисов настроены как сетевой псевдоним compose и swarm. Если у вас есть несколько совпадений для DNS-запроса, вы увидите циклический перебор между различными совпадениями для каждого запроса.

Учитывая это, у вас есть имя службы gogs и псевдоним службы mysql как gogs. В результате половина запросов DNS сначала разрешается в службу gogs, а другая половина - в службу mysql. Это приведет к неожиданному поведению. Вам следует изменить имя службы gogs или использовать другое имя для псевдонима mysql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...