簡體   English   中英

如何在本地主機上使用自定義域運行 docker 容器

[英]How to run docker container with custom domain on localhost

我通常將 Docker 用於桌面,我需要同時在多個項目中工作。

所以我想用單獨的 URL 設置單獨的項目,比如 xampp 上的虛擬主機。 例如項目 A = http://project-a.test ,項目 B = http://project-b.test

我曾經嘗試過研究並設置它分離端口,但仍然無法像上面那樣將其映射為域。

是否可以設置自定義域? 如果是這樣,請逐步解釋如何通過 docker-compose.yml(和/或使用 Dockerfile)和 apache 服務器進行設置。 提前致謝。

這是我設置項目的示例-a 這里是我的 docker-compose.yml

version: "3"

services:
  web:
    container_name: simplephp56
    build:
      context: .
      dockerfile: ${DOCKER_FILE}
    ports:
      - "${HTTP_PORT}:80"
      - "${HTTPS_PORT}:443"
      - "25:25"
    volumes:
      - "${WORKING_DIR}:/var/www/html"
    restart: always

我的 .env

DOCKER_FILE=Dockerfile56
WORKING_DIR=./code
HTTP_PORT=8000

我的 000-default.conf

<VirtualHost *:8000>
  ServerAdmin webmaster@simplephp56.com
  ServerName simplephp56.com
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我的 Dockerfile(名為 Dockerfile56)

FROM php:5.6-apache

RUN buildDeps=" \
  libmcrypt-dev \
  libcurl4-gnutls-dev \
  libicu-dev \
  libpng-dev \
  libjpeg-dev \
  libfreetype6-dev \
  libxml2-dev \
  libc-client-dev \
  libssh2-1-dev \
  libbz2-dev \
  redis-server \
  git \
  " \
  && apt-get update && apt-get install -y $buildDeps \
  && pecl install ssh2 \
  && docker-php-ext-configure intl \
  && docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \
  && docker-php-ext-install -j$(nproc) calendar iconv curl intl xml soap session mcrypt opcache pdo pdo_mysql mysqli mbstring json hash zip fileinfo xmlrpc xmlwriter bcmath ctype sockets ftp gd dom bz2 tokenizer \
  && docker-php-ext-enable intl xml json ssh2

COPY ./config/000-default.conf /etc/apache2/sites-available/000-default.conf

我正在運行類似的設置。 很可能,您的設置問題在於,您只能通過單個應用程序在同一端口上偵聽。 您可以設置多個域以解析為127.0.0.1 (aka localhost) ,但您不能讓多個 HTTP 服務器監聽端口80

您可以通過使用另一個代理網絡服務器容器偵聽端口80並根據傳入請求的主機名將請求重定向(或更准確地說是重寫)到實際容器來克服此問題。

所以,

  1. 將域project-a.testproject-b.test設置為在hosts文件中解析為127.0.0.1
  2. 使project-a.testproject-b.test的 docker 容器在不同於80的端口上偵聽。
  3. 使用nginx-proxy類的東西將請求重寫到實際容器的正確端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM