2016-04-24 82 views
0

我正在爲多個網站創建Docker環境。我已決定爲每個域分開具有多個容器的docker-compose.yml文件。目前,我有這樣的事情:爲多個Docker容器使用域而不是端口

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與端口?我已經添加到我的Windows(我使用Windows作爲操作系統)l2.app映射到192.168.99.100,但我仍然需要像這樣使用它:http://l2.app:8088

我也試着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一切正常訪問網站。

我假設我可能錯誤配置了端口映射nginx-proxy,但不知道映射在哪個位置不正確。你能給我這個建議嗎?

+0

我想你需要首先啓動'nginx-proxy'容器,然後'docker-compose up'。另外''nginx-proxy'的端口映射應該是80:80。雖然我認爲Windows上的這個設置可能會有進一步的問題,因爲Docker在Windows上的虛擬機內部運行,所以現在您將'l2.app'指向192.168.99.100,但'nginx-proxy'指向'l2.app '到虛擬機內容器的內部IP地址。我沒有測試過,但我認爲它可能無法正常工作。 –

+0

@warmoverflow我幾乎可以肯定,我也在努力,因爲你寫了,但我會盡快再試一次,我將我的PC周圍 –

+0

@warmoverflow我已經做到了 - 沒有成功。我也嘗試將'expose'改爲'80',但它也完全沒有幫助 –

回答

1

這比我想象的要容易。以下是通過命令行執行的步驟,但您應該可以基於此創建相應的docker-compose.yml文件。你不需要端口映射的應用容器,如果它運行在默認爲80(代理會知道如何轉發流量到每個容器的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 
  • 開始nginx-proxy容器第一
  • 注意,雙斜線var之前。取決於您使用的終端,您可能只需要一個斜線。爲自己嘗試。

    docker run -d -p 80:80 -v //var/run/docker/sock:/tmp/docker.sock:ro jwilder/nginx-proxy 
    
  • 啓動app1app2容器
  • 您可以使用相同的命令開始更多的容器,只是改變了域名和圖像名稱

    docker run -d -e VIRTUAL_HOST=myapp1.com myapp1 
    docker run -d -e VIRTUAL_HOST=myapp2.com myapp2 
    
    1. 在您的網絡瀏覽器中,打開http://myapp1.comhttp://myapp2.com
    +0

    感謝您的回覆,我還沒有嘗試過,但我正在使用'docker-compose.yml'和運行像'docker-compose up -d'這樣的容器,並用'docker run'顯示該方法。我應該使用哪個圖像,以及如何在不使用'docker-compose'的情況下鏈接它們? –

    +0

    我相信如果你先用80:80運行nginx-proxy,然後運行你的撰寫文件(但刪除端口映射並公開網絡命令),它將會正常工作。如果沒有,請嘗試刪除VIRTUAL_NETWORK –

    +0

    恐怕它不起作用。沒有'myapp1'圖片,因爲我在'docker-compose.yml'中有自己的容器名稱。 –

    相關問題