我正在尝试为我的在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
。
我做错什么了吗?
答案 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文件。