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

如何解决GitHub Action中S3输出传递到EC2容器变量为空的问题

问题排查与解决步骤

第一步:先确认GitHub Action的输出是否正常

在Updating EC2 [Develop] instance步骤前加个调试步骤,验证s3动作的输出值是否正确生成:

- name: 调试S3输出值
  run: |
    echo "user_id: ${{steps.s3.outputs.user_id}}"
    echo "user_key: ${{steps.s3.outputs.user_key}}"

如果这一步输出为空,说明s3-actions的输出有问题:

  • 检查generate_keys函数里的$USER变量是否有值:函数里执行aws iam create-access-key --user-name $USER,如果$USER为空,创建密钥会直接失败,导致输出为空。你需要在Building S3 Instance步骤的env里添加USER: '你的IAM用户名',否则这个变量是空的。

第二步:把EC2宿主机的变量传给容器

如果第一步验证输出正常,那问题就是宿主机的变量没传递到容器里,有几种解决方式:

方式1:在docker-compose.yml里配置引用宿主机变量

修改你的docker-compose.yml,给需要这些变量的服务加environment配置:

services:
  你的服务名:
    # ...其他配置
    environment:
      - BUCKET_USER=${BUCKET_USER}
      - BUCKET_USER_KEY=${BUCKET_USER_KEY}

这样docker-compose启动时会自动读取宿主机的这两个变量,传给容器。

方式2:启动容器时直接传变量

在ssh-action的script里,启动命令直接带变量:

docker-compose up -d -e BUCKET_USER=$BUCKET_USER -e BUCKET_USER_KEY=$BUCKET_USER_KEY

如果是指定服务,就加上服务名:

docker-compose up -d 你的服务名 -e BUCKET_USER=$BUCKET_USER -e BUCKET_USER_KEY=$BUCKET_USER_KEY

方式3:临时生成.env文件

在ssh-action的script里,先把变量写入.env文件,再启动docker-compose:

cd ~/devdir
export BUCKET_USER=${{steps.s3.outputs.user_id}}
export BUCKET_USER_KEY=${{steps.s3.outputs.user_key}}
# 写入.env文件
echo "BUCKET_USER=$BUCKET_USER" >> .env
echo "BUCKET_USER_KEY=$BUCKET_USER_KEY" >> .env
# 后续命令不变
docker login
docker-compose down --remove-orphans
docker system prune -a -f
docker pull yyyy
docker-compose up -d

docker-compose默认会读取当前目录的.env文件,容器就能拿到这些变量。

第三步:验证容器内变量是否生效

启动容器后,可以在ssh-action的script末尾加命令验证:

# 查看容器内变量
docker exec 你的容器名 env | grep BUCKET_
# 或者直接打印变量值
docker exec 你的容器名 echo "BUCKET_USER: \$BUCKET_USER"

内容的提问来源于stack exchange,提问作者Carlos Gonzalez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:01:08