Docker本地环境如何自定义本地域名(hosts文件?)

7

我对Docker还有点不熟,但我已经寻找它很长时间了。

我几乎总是使用这个容器:https://hub.docker.com/_/wordpress/,因为我的大多数项目都是基于WordPress的。

问题是,每次我运行这个容器时,我都在本地主机域上运行它。现在,在我工作的公司,我们仍在使用虚拟机。在这里,我有一个'homestead.yml'文件,可以添加自定义域和它的路径。我还需要将其添加到我的主机文件中,并运行vagrant provision。

我不想在这台Mac上使用虚拟机,因为我喜欢使用Docker的速度,但我确实想要自定义域名。例如;我正在开发一个名为'sunglasses'的项目,我想为本地环境创建一个名为'sunglasses.local'的本地域。但是似乎无法使其正常工作...

我的docker-compose文件如下:

version: '3.1'
services:
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    restart: unless-stopped
    working_dir: /var/www/html
    volumes:
      - ./wp-content:/var/www/html/wp-content
    # - /Users/username/dev/wordpress-foundation-boilerplate/wp-content:/var/www/html/wp-content
    # - /Users/username/dev/docker-wp-demo/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    environment:
      WORDPRESS_DB_NAME: database
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: p4ssw0rd!
      WORDPRESS_TABLE_PREFIX: wp_
      WORDPRESS_DEBUG: 1
      WORDPRESS_CONFIG_EXTRA: | # Add config to wp-config.php
        define('FS_METHOD', 'direct');
        define('WP_DEBUG_LOG', true);
        define( 'WP_DEBUG', true );
    ports:
      - 8000:80
      - 443:443
    networks:
      - back
  db:
    image: mysql:5.7
    restart: unless-stopped
    volumes:
       - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: p4ssw0rd!
    networks:
      - back
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - 8080:80
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: p4ssw0rd!
    networks:
      - back
networks:
  back:
volumes:
  db_data:

我正在使用 Gasmask(参见:http://clockwise.ee/)编辑 hosts 文件,并已添加了我想要使用的域名和正确的 IP 地址。
你有什么想法吗?我不知道在我的 docker-compose 文件中该把域名地址放在哪里。我已尝试将其添加到 'ports' 下,但这甚至无法运行我的 docker-compose 文件。希望有人知道我做错了什么。
1个回答

4

在工作中,我们使用dnsmasq将以.docker结尾的顶级域名请求转发到本地。以下是具体步骤:

要求:需要安装homebrew并拥有管理员权限。

为了转发.docker顶级域名,需要安装并配置Dnsmasq

$ brew up && brew install dnsmasq
$ sudo mkdir -p /etc/resolver
$ echo 'nameserver 127.0.0.1' | sudo tee -a /etc/resolver/docker > /dev/null
$ echo 'address=/docker/127.0.0.1' | tee -a /usr/local/etc/dnsmasq.d/docker-tld.conf > /dev/null
$ sudo brew services start dnsmasq

注意:解析器将在重新启动后开始工作

修改 /usr/local/etc/dnsmasq.conf

    ...

listen-address=127.0.0.1

    ...

conf-dir=/usr/local/etc/dnsmasq.d/,*.conf

测试DNS服务器

$ dig test.docker @127.0.0.1

; <<>> DiG 9.9.7-P3 <<>> test.docker @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40401
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;test.docker.           IN  A

;; ANSWER SECTION:
test.docker.        0   IN  A   127.0.0.1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Feb 08 16:24:12 CET 2018
;; MSG SIZE  rcvd: 45

测试配置

; Make sure your DNS is still working.
$ ping -c 1 www.google.com

PING www.google.com (216.58.206.4): 56 data bytes
64 bytes from 216.58.206.4: icmp_seq=0 ttl=53 time=26.789 ms

--- www.google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 26.789/26.789/26.789/0.000 ms

检查 .docker 域名是否正常工作

$ ping -c 1 test.docker
  PING test.docker (127.0.0.1): 56 data bytes

Source: Passing Curiosity


2
在 Docker 容器上设置自定义本地主机名的过程让人感到很不友好。2021 年有更简单的方法吗? - klewis
1
您可以随时手动添加条目到hosts文件中... - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接