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

时间:2019-10-31 21:49:15

标签: apache docker docker-compose dockerfile appdomain

我正在尝试为我的在docker上运行的应用设置本地自定义域名,所以不要使用http://localhost:8080从浏览器访问我的应用,以使用类似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

我做错什么了吗?

1 个答案:

答案 0 :(得分:0)

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>

此命令会将主机端口绑定到容器端口。 (在这种情况下,Web服务器正在端口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文件。