首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为多个Docker容器使用域而不是端口

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

Stack Overflow用户
提问于 2016-04-24 15:32:36
回答 1查看 2.8K关注 0票数 0

我正在为多个网站创建Docker环境。我决定为每个域使用多个容器的单独docker-compose.yml文件。现在我有这样的事情:

代码语言:javascript
复制
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。显然,在上面的配置中,我可以使用80:80映射,但是让我们假设我想使用8088端口(因为对于多个站点,我需要为每个网站使用不同的端口)。

现在的问题是,如何使用域而不是带有端口的IP?我已经将映射到192.168.99.100192.168.99.100添加到Windows (将Windows操作系统)添加到Windows中,但我仍然需要像这样使用它:http://l2.app:8088

我也尝试过这样的nginx-proxy

代码语言:javascript
复制
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时,一切都很好。

我想我可能对nginx-proxy的端口映射做了错误的配置,但不知道映射在哪里是不正确的。你能给我一些建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-24 20:08:35

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

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

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

代码语言:javascript
复制
192.168.99.100 myapp1.com
192.168.99.100 myapp2.com
  1. 首先启动nginx-proxy容器

注意,var之前的双斜杠。您可能只需要一个斜杠取决于您使用的终端。自己试试看。

代码语言:javascript
复制
docker run -d -p 80:80 -v //var/run/docker/sock:/tmp/docker.sock:ro jwilder/nginx-proxy
  1. 启动app1app2容器

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

代码语言:javascript
复制
docker run -d -e VIRTUAL_HOST=myapp1.com myapp1
docker run -d -e VIRTUAL_HOST=myapp2.com myapp2
  1. 在web浏览器中,打开http://myapp1.comhttp://myapp2.com
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36825214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档