AWS EC2中Docker-Compose部署WordPress无法访问80端口问题
首先针对你遇到的80端口无法访问的核心问题,我整理了几个常见的排查和解决步骤:
一、排查主机80端口是否被占用
Amazon Linux AMI 2018.03.0默认可能预装了Apache(httpd)服务,它会默认监听80端口,直接和你的Docker容器端口映射冲突。你可以通过以下命令检查:
# 查看80端口的监听进程(推荐用ss,比netstat更高效) ss -tulpn | grep :80 # 如果系统没有ss,用netstat替代 netstat -tulpn | grep :80
如果输出里出现httpd或其他占用80端口的进程,先停止并禁用该服务:
# 立即停止httpd服务 systemctl stop httpd # 禁止开机自启,避免后续重启主机再次占用端口 systemctl disable httpd
操作完成后,重启你的docker-compose服务,再尝试访问80端口。
二、检查SELinux限制
Amazon Linux默认开启SELinux,它可能会阻止Docker容器绑定1024以下的特权端口。你可以先临时关闭SELinux测试:
setenforce 0
如果此时能正常访问80端口,说明是SELinux的限制导致的。要永久解决的话,编辑/etc/selinux/config文件,把SELINUX=enforcing修改为SELINUX=permissive,然后重启主机生效。
三、验证Docker的端口绑定权限
虽然你用root身份运行docker-compose,但如果Docker daemon的配置存在异常,也可能导致低端口绑定失败。可以按以下步骤修复:
- 编辑(或创建)Docker配置文件
/etc/docker/daemon.json,添加以下内容:
{ "iptables": true, "ip-forward": true }
- 重启Docker服务,让配置生效:
systemctl restart docker
- 重新启动你的docker-compose服务:
docker-compose down && docker-compose up -d
关于Docker-Compose的安装目录与root运行建议
推荐安装目录
官方推荐将docker-compose安装到/usr/local/bin/目录下,这个目录默认在系统的PATH环境变量中,不管是root用户还是加入docker组的普通用户都能直接调用。安装命令示例(以v2.20.0版本为例,你可以替换成最新稳定版本):
curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 给文件添加执行权限 chmod +x /usr/local/bin/docker-compose
验证安装是否成功:
docker-compose --version
root运行的正确方式
用root运行docker-compose不需要特意更换安装目录,只要你在存放docker-compose.yml文件的目录下,直接执行:
docker-compose up -d
如果yml文件不在当前工作目录,也可以通过-f参数指定路径:
docker-compose -f /path/to/your/docker-compose.yml up -d
另外,默认情况下root用户的PATH已经包含/usr/local/bin/,所以不需要额外配置就能直接调用docker-compose命令。
内容的提问来源于stack exchange,提问作者xtra

