为多个Docker容器使用域而不是端口

我正在为多个网站创buildDocker环境。 我已经决定要为每个域分开具有多个容器docker-compose.yml文件。 目前我有这样的事情:

 web: image: nginx:latest volumes: - /c/Users/marcin/dock-test/html/test-laravel-project-2/:/usr/share/nginx/html/test-laravel-project-2/ - /c/Users/marcin/dock-test/nginx-conf/conf.d2/:/etc/nginx/conf.d - /c/Users/marcin/dock-test/nginx-log/:/var/log/nginx ports: - "8088:80" working_dir: /usr/share/nginx/html/test-laravel-project-2/ links: - php - db container_name: lara.web environment: - VIRTUAL_HOST='l2.app' - VIRTUAL_NETWORK='nginx-proxy' expose: - 8088 php: build: ../dockerfiles/ dockerfile: Dockerfile-php7-fpm volumes: - /c/Users/marcin/dock-test/html/test-laravel-project-2/:/usr/share/nginx/html/test-laravel-project-2/ - /c/Users/marcin/dock-test/php-config/:/usr/local/etc/php/ working_dir: /usr/share/nginx/html/ links: - db container_name: lara.php db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: MYSQL_DATABASE: MYSQL_USER: MYSQL_PASSWORD: expose: - 3306 volumes: - /c/Users/marcin/dock-test/mysql2/:/var/lib/mysql/ - /c/Users/marcin/dock-test/mysql-log2/:/var/log/mysql/ ports: - "33062:3306" container_name: lara.db 

这工作正常,但我想为此使用域,因为此刻我需要使用8088端口像这样: http://192.168.99.100:8088 : http://192.168.99.100:8088 :8088。 显然我可以在上面的configuration使用80:80映射,但我们假设我想要使用8088端口(因为对于多个站点,我将需要使用不同的端口为每个网站)。

而现在的问题 – 我怎样才能使用域名而不是端口IP? 我已经添加到我的Windows(我使用Windows作为操作系统) l2.app映射到192.168.99.100 ,但我仍然需要像这样使用它: http://l2.app:8088 : l2.app

我也试过这样的nginx-proxy

 docker pull jwilder/nginx-proxy docker-compose up -d docker run -d -p 80:8088 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy 

但是当我尝试访问网站使用http://l2.app我得到503 ,显然当我使用http://l2.app:8088一切都很好。

我假设我可能错误地configuration了nginx-proxy端口映射,但是不知道映射在哪个地方是不正确的。 你可以给我这个build议吗?

这比我想象的要容易。 以下是通过命令行执行的步骤,但您应该可以在此基础上创build相应docker-compose.yml文件。 如果应用程序容器默认运行时为80,则不需要端口映射(代理将知道如何将stream量转发到每个容器的80端口,因此您不需要映射它们!)

  1. 编辑您的Windows主机文件,将域指向192.168.99.100

在Windows 2000 / XP / Vista / 7/8/10上,文件位置为C:\\Windows\\System32\\drivers\\etc\\hosts 。 添加以下行

 192.168.99.100 myapp1.com 192.168.99.100 myapp2.com 
  1. 首先启动nginx-proxy容器

请注意, var之前的双斜杠。 您可能只需要一个斜线,具体取决于您正在使用的terminal。 为自己而努力。

 docker run -d -p 80:80 -v //var/run/docker/sock:/tmp/docker.sock:ro jwilder/nginx-proxy 
  1. 启动您的app1app2容器

您可以使用相同的命令启动更多容器,只需更改域和映像名称即可

 docker run -d -e VIRTUAL_HOST=myapp1.com myapp1 docker run -d -e VIRTUAL_HOST=myapp2.com myapp2 
  1. 在您的networking浏览器中,打开http://myapp1.comhttp://myapp2.com