繁体   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