如何在Docker for Mac中设置主机

当我使用docker之前,我可以使用docker-machine ssh default在docker的机器/etc/hosts ,但是在docker for mac中,我无法访问它的虚拟机,因为它没有它。 所以,问题是how to set hosts in docker for mac ? 我的辅助域名想要指向另一个IP。

我find了一个解决scheme,使用这个命令

 screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty 

现在编辑Docker虚拟机中的/etc/hosts
要退出screen ,请使用Ctrl + a + d

以下是我如何使用bash脚本执行此操作,以便在Docker for Mac重新启动之间进行更改。

 cd ~/Library/Containers/com.docker.docker/Data/database git reset --hard DFM_HOSTS_FILE="com.docker.driver.amd64-linux/etc/hosts" if [ ! -f ${DFM_HOSTS_FILE} ]; then echo "appending host to DFM /etc/hosts" echo -e "xxx.xxx.xxx.xxx\tmy.special.host" > ${DFM_HOSTS_FILE} git add ${DFM_HOSTS_FILE} git commit -m "add host to /etc/hosts for dns lookup" fi 

你可以通过这个脚本自动运行,在启动时运行这个脚本或者login时间可以节省你的时间。

 #!/bin/sh # host entry -> '10.4.1.4 dockerreigstry.senz.local' # 1. run debian image # 2. check host entry exists in /etc/hosts file # 3. if not exists add it to /etc/hosts file docker run --name debian -it --privileged --pid=host debian nsenter \ -t 1 -m -u -n -i sh \ -c "if ! grep -q dockerregistry.senz.local /etc/hosts; then echo -e '10.4.1.4\tdockerregistry.pagero.local' >> /etc/hosts; fi" # sleep 2 seconds # remove stopped debian container sleep 2 docker rm -f debian 

我已经创build了一个关于这个主题的更多信息的博客文章。

https://medium.com/@itseranga/set-hosts-in-docker-for-mac-2029276fd448

您必须创build一个docker-compose.yml文件。 这个文件将在你的Dockerfile的相同路由上例如,我使用这个docker-compose.yml文件:

 version: '2' services: app: hostname: app build: . volumes: - ./:/var/www/html working_dir: /var/www/html depends_on: - db - cache ports: - 80:80 cache: image: memcached:1.4.27 ports: - 11211:11211 rabbitmq: image: rabbitmq:latest ports: - 5672:5672 db: image: postgres:9.5.3 ports: - 5432:5432 environment: - TZ=America/Mazatlan - POSTGRES_PASSWORD=root - POSTGRES_DB=restaurantcore - POSTGRES_USER=rooms - POSTGRES_PASSWORD=rooms 

端口与您的主docker机器的端口绑定。