在 Docker 中绑定域名主要有以下几种方式,取决于你的具体使用场景:
在容器内部应用程序中配置域名绑定(如 Nginx、Apache 等):
# 示例 Dockerfile 片段(适用于 Web 服务器)
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
对应的 nginx.conf 配置:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
在运行容器时添加主机名:
docker run --name myapp --hostname myapp.yourdomain.com -d your_image
或者在宿主机 /etc/hosts
文件中添加映射:
127.0.0.1 yourdomain.com
在 docker-compose.yml 中配置:
version: '3'
services:
web:
image: nginx:alpine
hostname: web.yourdomain.com
domainname: yourdomain.com
ports:
- "80:80"
使用 Nginx 或 Traefik 作为反向代理:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:容器映射端口;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
version: '3'
services:
traefik:
image: traefik:v2.5
command:
- --api.insecure=true
- --providers.docker
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
whoami:
image: containous/whoami
labels:
- "traefik.http.routers.whoami.rule=Host(`whoami.yourdomain.com`)"
docker run --add-host yourdomain.com:容器IP -d your_image
对于生产环境,建议: 1. 使用反向代理(Nginx/Traefik/Caddy) 2. 配合 Let's Encrypt 实现 HTTPS 3. 使用 Docker Swarm 或 Kubernetes 进行编排时,利用其内置的域名路由功能
需要更具体的解决方案,请提供你的具体使用场景和需求。