使用自定义域名访问 docker 个容器化应用程序

Accessing docker containerized application using custom domain name

我正在尝试为我在 docker 上运行的应用程序在本地设置自定义域名,而不是使用 http://localhost:8080 to use something like http://myapp.dev

从浏览器访问我的应用程序

这是我的 /etc/hosts 文件

127.0.0.1       localhost
127.0.0.1       myapp.dev

在我的 Dockerfile 中,我有这个 vhost 文件 COPY docker/vhost.conf /etc/apache2/sites-available/000-default.conf 将配置从本地复制到 apache 配置中

<VirtualHost *:80>

    ServerName myapp.dev
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/public

    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

但是当我尝试使用本地域名访问应用程序时,从浏览器收到一条消息说 Unable to connect

我是不是做错了什么?

vhost.conf复制到docker图像中会影响容器内的apache服务器端口。不是从物理机访问它的方式。

vhost.conf 不应与主机名绑定 ServerName myapp.dev 因为在容器内主机名会不同。

更改 ServerName 以接受来自 127.0.0.1*

的请求

应该完成主机到容器端口的映射才能从浏览器访问应用程序

docker run --name <container-name> -p 80:80 -d <image-name>

此命令会将主机端口绑定到容器端口。 (在这种情况下,网络服务器 运行 在端口 80 上并配置为与主机端口 80 绑定)

更多信息 -



在 docker-compose 文件中,使用如下 - https://docs.docker.com/compose/networking/

version: "3"
services:

  apache:
    image: apache:latest
    ports:
      - "80:80"

示例,未使用 docker-compose。但是一旦容器处于 运行 状态,就可以按照描述验证端口绑定。

使用 docker container ls

的输出验证端口绑定是否成功
$ docker run --name mynginx1 -p 80:80 -d nginx
ba2565a8e7e4a3e5909cb055603eb5161dd50e6f17019b2a9f11ba9b2b4888e4
$ docker container ls | grep mynginx1
ba2565a8e7e4        nginx               "nginx -g 'daemon of…"   12 seconds ago      Up 10 seconds       0.0.0.0:80->80/tcp    mynginx1

接下来,使用所需的 DNS 名称更新 /etc/hosts 文件。