使用自定义域名访问 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 绑定)
更多信息 -
- https://runnable.com/docker/binding-docker-ports
- https://docs.docker.com/config/containers/container-networking/
在 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 文件。
我正在尝试为我在 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 绑定)
更多信息 -
- https://runnable.com/docker/binding-docker-ports
- https://docs.docker.com/config/containers/container-networking/
在 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 文件。