我与大约10-12名开发人员合作,他们都在不同的开发环境中工作,主要是通过brew管理的MAMP或Nginx / php-fpm。我们希望逐步转向Docker,在提交之前试用它来开发我们的众多产品之一。
我们在这种情况下面临的问题是如何在与Docker同时运行MAMP,Nginx等时避免TCP端口冲突。让我们的开发环境监听标准端口(在这种情况下为80,443和3306)是至关重要的,现在我们发现自己必须打开和关闭本地服务器环境,具体取决于正在处理的项目。
默认情况下,docker将端口映射到0.0.0.0上的主机,是否有办法改变此行为,允许各种服务器环境通过使用不同的IP地址同时侦听同一端口?
谢谢!
答案 0 :(得分:0)
对于任何有兴趣的人,我设法通过以下步骤解决了这个问题。
1。)sudo ifconfig lo0 alias 127.0.0.2 up
这使127.0.0.2成为loopback接口的别名
2。)现在我们指示jwilder nginx反向代理将端口绑定到主机上的特定IP地址而不是0.0.0.0
docker run --restart unless-stopped -p 127.0.0.2:80:80 -p 127.0.0.2:443:443 --name nginx -v ~/docker/tls:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro -v ~/docker/confs:/etc/nginx/conf.d jwilder/nginx-proxy
3.)对MySQL做同样的事情
docker run --restart unless-stopped -p 127.0.0.2:3306:3306 --name mysqlserver -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
4。)现在确保其他Web服务,即brew nginx正在侦听nginx.conf / server中的localhost
5.)相应地调整主机文件
127.0.0.1 exampleapp.org # host app
127.0.0.1 exampleapp2.org # host app
127.0.0.2 dockerapp.org # docker app
127.0.0.2 dockerapp2.org # docker app