You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Docker中运行的应用部署到Ubuntu服务器并实现域名/IP访问

将Docker应用部署到Ubuntu并通过域名/IP访问的配置步骤

一、Docker容器端口配置

首先确保你的Docker容器正确映射端口到宿主机,且仅允许本地访问(提升安全性):

  • 启动容器时使用-p参数映射端口,例如你的应用在容器内运行在8000端口,执行:
    docker run -d -p 127.0.0.1:8000:8000 --name my-app --restart always your-image-name
    
    参数说明:
    • 127.0.0.1:8000:限制仅宿主机本地能访问该端口,避免直接暴露容器端口到公网
    • --restart always:确保服务器重启后容器自动启动
  • 验证容器运行状态:执行docker ps,确认PORTS列显示127.0.0.1:8000->8000/tcp

二、Apache反向代理配置

1. 启用必要的Apache模块

执行以下命令启用反向代理相关模块:

a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests
systemctl restart apache2

2. 配置虚拟主机(域名访问场景)

创建Apache虚拟主机配置文件:

touch /etc/apache2/sites-available/mydomain.com.conf

编辑该文件,添加以下内容:

<VirtualHost *:80>
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    ServerAdmin your-email@example.com

    # 反向代理到Docker容器映射的端口
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/

    # 日志配置(可选)
    ErrorLog ${APACHE_LOG_DIR}/mydomain.com-error.log
    CustomLog ${APACHE_LOG_DIR}/mydomain.com-access.log combined
</VirtualHost>

启用该虚拟主机并重启Apache:

a2ensite mydomain.com.conf
systemctl restart apache2

3. 配置IP访问(无域名场景)

如果直接用服务器IP访问,创建新的虚拟主机配置:

touch /etc/apache2/sites-available/ip-access.conf

添加以下内容:

<VirtualHost *:80>
    ServerAdmin your-email@example.com

    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/

    ErrorLog ${APACHE_LOG_DIR}/ip-access-error.log
    CustomLog ${APACHE_LOG_DIR}/ip-access-access.log combined
</VirtualHost>

启用并重启Apache:

a2ensite ip-access.conf
systemctl restart apache2

三、额外必要配置

1. 域名解析(仅域名访问场景)

在你的域名提供商后台,添加A记录:

  • 主机记录:@(对应mydomain.com)和www(对应www.mydomain.com)
  • 记录值:服务器的公网IP地址

2. 防火墙设置

开放HTTP(80)和HTTPS(443)端口:

ufw allow 80/tcp
ufw allow 443/tcp
ufw reload

3. 启用HTTPS(推荐)

使用Certbot申请免费SSL证书并自动配置Apache:

apt install certbot python3-certbot-apache
certbot --apache -d mydomain.com -d www.mydomain.com

执行后会自动修改虚拟主机配置,强制HTTPS访问并完成HTTP到HTTPS的301跳转。

四、可选优化:静态文件直接由Apache处理

如果你的应用有静态文件(如CSS、JS、图片),可以让Apache直接托管,减轻容器压力:
在虚拟主机配置中添加:

# 映射静态文件目录
Alias /static /var/www/mydomain/static
<Directory /var/www/mydomain/static>
    Require all granted
    Options -Indexes
</Directory>

# 告诉Apache不要代理静态文件路径
ProxyPass /static !

重启Apache生效。

内容的提问来源于stack exchange,提问作者Mirnamiq Abdullayev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:06:29