【问题标题】:Docker local environment custom local domains (hosts file?)Docker本地环境自定义本地域(hosts文件?)
【发布时间】:2019-10-23 16:00:26
【问题描述】:

我对 docker 有点陌生,但我已经搜索了很长时间。

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

关键是每次我运行这个容器时,我都是在 localhost 域上运行它。现在在我工作的公司,我们仍在使用虚拟机。在这里,我有一个“homestead.yml”文件,我可以添加一个自定义域及其路径。我还需要将它添加到我的 hosts 文件中,并运行一个 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 文件中。我已经尝试在“端口”下添加它,但这甚至没有运行我的 docker-compose 文件。我希望有人知道我做错了什么。

【问题讨论】:

    标签: wordpress docker docker-compose localhost


    【解决方案1】:

    在工作中,我们使用 dnsmasq 将请求传递到以 .docker 结尾的 TLD 到 localhost。方法如下:

    要求:homebrew 和管理权限

    要转发.docker TLD,请安装和配置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 TLD 是否正常工作

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

    来源:Passing Curiosity

    【讨论】:

    • 这个过程对于简单地在 docker 容器上设置一个自定义的本地主机名感觉很吓人。 2021 年有什么更简单的方法来解决这个问题?
    • 您可以随时手动将条目添加到 hosts 文件中...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多