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

如何为已有自定义WordPress Docker容器启用SSH并部署至AWS ECS Fargate

为WordPress Docker容器启用SSH并部署到AWS ECS Fargate

一、修改Dockerfile以启用SSH功能

现有Dockerfile存在两个核心问题:未安装SSH服务,且仅启动SSH会导致Apache(WordPress依赖)无法运行。以下是修正后的Dockerfile:

FROM php:5.6-apache

# 安装依赖及SSH服务
RUN apt-get update && apt-get install -y cron git-core vim openssh-server \
  libjpeg-dev libmcrypt-dev libpng-dev libpq-dev libsqlite3-dev && \
  rm -rf /var/lib/apt/lists/* && \
  docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr && \
  docker-php-ext-install gd mysqli opcache mysql pdo pdo_mysql zip

# 配置SSH:允许root登录,设置测试密码(生产环境建议改用密钥)
RUN echo 'root:YourSecureTestPassword' | chpasswd && \
    sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config

# 创建SSH运行目录
RUN mkdir /var/run/sshd

# 复制WordPress代码及配置
COPY ["html","/var/www/html/"]
RUN chown -R www-data:www-data  /var/www/html/*
COPY ./config/uploads.ini /usr/local/etc/php/conf.d/uploads.ini

# 复制自定义启动脚本
COPY start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh

CMD ["start.sh"]

二、创建启动脚本(start.sh)

Docker容器默认仅能运行一个主进程,因此需要脚本同时启动Apache和SSH服务:

#!/bin/bash

# 后台启动Apache
apache2-foreground &

# 前台启动SSH服务(保持容器运行)
/usr/sbin/sshd -D

三、修改docker-compose.yml(本地测试用)

添加SSH端口映射,避免与Windows本地SSH服务端口冲突:

version: '3'
services:
  wordpress:
    build: .
    restart: always
    ports:
      - "80:80"
      - "2222:22"  # 本地映射2222到容器22端口
    environment:
      WORDPRESS_DB_HOST: <rdshost>
      WORDPRESS_DB_USER: <user>
      WORDPRESS_DB_PASSWORD: <your-db-password>
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_CONFIG_EXTRA: |
   
    volumes:
     - wordpress:/var/www/html
volumes:
  wordpress:

四、Windows系统本地测试步骤

  1. 构建镜像并启动容器:
docker-compose up --build -d
  1. 使用PowerShell/Git Bash/Putty等工具连接容器:
ssh root@localhost -p 2222

输入Dockerfile中设置的测试密码即可登录。

五、部署到AWS ECS Fargate的配置要点

1. 推送镜像至Amazon ECR

# 登录ECR
aws ecr get-login-password --region <your-region> | docker login --username AWS --password-stdin <your-account-id>.dkr.ecr.<your-region>.amazonaws.com

# 打标签
docker tag wordpress:latest <your-account-id>.dkr.ecr.<your-region>.amazonaws.com/wordpress-ssh:latest

# 推送镜像
docker push <your-account-id>.dkr.ecr.<your-region>.amazonaws.com/wordpress-ssh:latest

2. ECS任务定义配置

  • 端口映射:在容器配置中添加22端口,服务安全组需允许信任IP段的22端口入站流量。
  • 敏感信息管理:数据库密码等敏感内容建议通过AWS Secrets Manager存储,避免硬编码在配置中。
  • 生产安全优化:禁用密码登录,改用SSH密钥——将公钥复制到容器/root/.ssh/authorized_keys,可通过Dockerfile的COPY命令或ECS挂载实现。

3. 安全组规则

确保安全组允许:

  • 80端口的公网HTTP流量(WordPad访问)
  • 22端口的SSH流量(仅限信任IP/VPC内部)

关键提示

  • 生产环境优先使用AWS SSM Session Manager访问容器,无需暴露22端口,安全性更高。
  • Windows系统中若Docker Desktop端口映射失败,检查是否有其他程序占用目标端口(如22端口可能被系统SSH服务占用)。

内容的提问来源于stack exchange,提问作者Farhan Farooq Sheikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:07:55