Docker主机名替代名称

时间:2018-06-12 12:15:27

标签: docker docker-compose

我的docker-compose.yml看起来像这样:

version: "3.2"

services:
  web:
    build: /Users/marcin/Docker/definitions/php-nginx/php-7.2-ubuntu
    volumes:
      - /some_dir/:/some_dir
    working_dir: /usr/share/nginx/html/
    links:
      - db
    container_name: name.web
    hostname: name.local
    expose:
      - "10015"
    ports:
      - "313:22"
      - "8313:80"
      - "18313:443"
    environment:
      - VIRTUAL_HOST=name.local,name-be.local,name-com.local,subdomain.name-com.local
      - CERT_NAME=default
      - HTTPS_METHOD=noredirect
    networks:
      - default
      - proxy_default
  db:
    build: /Users/marcin/Docker/definitions/mysql/8.0
    environment:
      - MYSQL_ROOT_PASSWORD=pass
      - MYSQL_DATABASE=
      - MYSQL_USER=
      - MYSQL_PASSWORD=
    expose:
      - 3306
    volumes:
      - /Users/marcin/Docker/projects/name.local/mysql/data/:/var/lib/mysql/
      - /Users/marcin/Docker/projects/name.local/mysql/conf.d/:/etc/mysql/conf.d/source
      - /Users/marcin/Docker/projects/name.local/mysql/log/:/var/log/mysql/
    ports:
      - "33313:3306"
    container_name: name.db
    hostname: name.local
    networks:
      proxy_default:
      external:
        name: proxy_default 

我使用name.localsubdomain.name-com.local域名访问此网站(在网络浏览器中) - 没有任何问题。

然而今天我必须进行一些测试,我发现在跑步时:

  

wget http://name.local

我可以毫无问题地获取网站内容,但在运行时

  

wget http://subdomain.name-com.local

此主机无法解析。

如何让两个域都将流量引导到同一主机?

我目前所做的是查看/etc/hosts并添加了我在domain.local下面找到的相同IP

hostname:name.local

这样的行:

extra_hosts:
   - "subdomain.name-com.local:192.168.0.3"
   - "subdomain.name-com.local:172.19.0.3"

现在似乎工作正常。但是,我不太喜欢这个解决方案(尽管它似乎没有任何问题),因为我必须在这里硬编码一些IP地址,我不确定它们是否会改变。

有可能以某种方式在这里添加主机名的别名而不是指定一些魔术IP地址吗?

1 个答案:

答案 0 :(得分:0)

为了定义主机名别名,您应该使用network aliases功能:

  

ALIASES此服务的别名(替代主机名)   网络。同一网络上的其他容器可以使用   服务名称或此别名连接到其中一个服务   容器

使用您的示例,它可能看起来像:

>>> bool_str = 'False'
>>> b = True if bool_str.lower() == 'true' else False
>>> b
False
>>> bool_str = 'true'
>>> b = True if bool_str.lower() == 'true' else False
>>> b
True