首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以通过Docker Networks For Containers使用什么名称(如果可能)?

我可以通过Docker Networks For Containers使用什么名称(如果可能)?
EN

Stack Overflow用户
提问于 2019-01-06 09:42:14
回答 1查看 71关注 0票数 0

使用Docker和Rancher v1.6,并在容器内部使用phpMyAdmin,使用它自己的堆栈创建一个名为db-admin的网络,即使当我向我希望能够访问的每个MySQL容器添加别名时,它们的别名也不能解析为容器IP地址。

示例

docker-compose.yml (Gog):

代码语言:javascript
复制
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):

代码语言:javascript
复制
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容器,但是phpMyAdmin显示了一个错误,说它无法解析该名称。我可以使用容器的IP地址(如Rancher v1.6接口所示),但如果可能的话,我希望有一种“更简单”的方式来引用它。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-01-07 20:19:33

服务名称由compose和swarm配置为网络别名。如果一个DNS查询有多个匹配项,您将看到每个查询的不同匹配项之间的循环调度。

鉴于此,您的服务名为gogs,mysql服务的别名为gogs。结果是一半的DNS查询将首先解析到gogs服务,另一半解析到mysql服务。这将导致意想不到的行为。您应该更改gogs服务的名称,或者为mysql别名使用不同的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54057937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档