Docker容器的本地主机名

Edu Wass:

这里的初学者Docker问题

因此,我有一个运行模块化应用程序的开发环境,它正在使用Docker Compose运行3个容器:服务器,客户端,数据库。

docker-compose.yml如下所示:

#############################
# Server
#############################
server:
  container_name: server
  domainname: server.dev
  hostname: server
  build: ./server
  working_dir: /app
  ports:
    - "3000:3000"
  volumes:
    - ./server:/app
  links:
    - database

#############################
# Client
#############################
client:
  container_name: client
  domainname: client.dev
  hostname: client
  image: php:5.6-apache
  ports:
     - "80:80"
  volumes:
   - ./client:/var/www/html

#############################
# Database
#############################
database:
  container_name: database
  domainname: database.dev
  hostname: database
  image: postgres:9.4
  restart: always
  environment:
    - POSTGRES_USER=postgres
    - POSTGRES_PASSWORD=root
    - POSTGRES_DB=dbdev
    - PG_TRUST_LOCALNET=true
  ports:
    - "5432:5432"
  volumes:
    - ./database/scripts:/docker-entrypoint-initdb.d # init scripts

您可以看到我正在为每个域名分配一个.dev域名,这样可以很好地查看另一台计算机(Docker内部网络)中的一台计算机,例如,此处是我server.devclient.devCLI ping 的:

    root@client:/var/www/html# ping server.dev
    PING server.dev (127.0.53.53): 56 data bytes
    64 bytes from 127.0.53.53: icmp_seq=0 ttl=64 time=0.036 ms

这在内部非常有效,但不适用于我的主机操作系统网络。

为了方便起见,我想在我的本地网络中分配域,而不是在Docker容器网络中分配域,以便例如在浏览器URL上键入:client.dev并加载Docker容器。

现在,只有使用动态的Docker IP才能访问:

client: 192.168.99.100:80
server: 192.168.99.100:3000
database: 192.168.99.100:5432

有没有一种自动/便捷的方式来执行此操作,而无需手动将IP添加到我的/ etc / hosts文件中?

顺便说一句,如果有任何相关性,我在OSX上。

谢谢!

编辑:我发现这个Github问题似乎与之相关:https : //github.com/docker/docker/issues/2335

据我了解,他们似乎说这是开箱即用的东西,他们建议使用外部工具,例如:

那是对的吗?如果是这样,在我的特定情况下我应该选择哪一个?

Edu Wass:

好,

因此,由于似乎没有使用Docker的本地方法,所以我最终选择了Ryan Armstrong的另一种解决方案,该解决方案包括动态更新/etc/hosts文件。

我选择它是因为它很方便,因为它可以作为脚本运行,并且我已经有了启动脚本,因此可以在其中添加此功能。

以下示例创建一个名为docker.local的主机条目,它将解析为您的docker-machine IP:

update-docker-host(){
    # clear existing docker.local entry from /etc/hosts
    sudo sed -i '' '/[[:space:]]docker\.local$/d' /etc/hosts

    # get ip of running machine
    export DOCKER_IP="$(echo ${DOCKER_HOST} | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')"

    # update /etc/hosts with docker machine ip
    [[ -n $DOCKER_IP ]] && sudo /bin/bash -c "echo \"${DOCKER_IP}   docker.local\" >> /etc/hosts"
}

update-docker-host

/etc/hosts当我通过启动脚本启动Docker计算机时,这将自动在主机OS上添加或删除行。

无论如何,正如我在研究过程中发现的那样,除了编辑hosts文件之外,您还可以通过设置自定义DNS服务器来解决此问题

在Github上还找到了几个显然旨在解决这个问题的项目,尽管我没有尝试过:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章