这里的初学者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.dev
从client.dev
CLI 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
据我了解,他们似乎说这是开箱即用的东西,他们建议使用外部工具,例如:
那是对的吗?如果是这样,在我的特定情况下我应该选择哪一个?
好,
因此,由于似乎没有使用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] 删除。
我来说两句