AWS CodeBuild 中的权限错误 运行 容器

Permission Error Running Container in AWS CodeBuild

我正在尝试 运行 在 CodeBuild 中执行以下命令:

- docker run --rm -v $(pwd)/SQL:/flyway/SQL -v $(pwd)/conf:/flyway/conf flyway/flyway -enterprise -url=jdbc:postgresql://xxx.xxx.us-east-1.rds.amazonaws.com:5432/hamshackradio -dryRunOutput="/flyway/SQL/output.sql" migrate

我收到以下错误:

ERROR: Unable to use /flyway/SQL/output.sql as a dry run output: /flyway/SQL/output.sql (Permission denied) Caused by: java.io.FileNotFoundException: /flyway/SQL/output.sql (Permission denied)

目标是捕获 output.sql 文件。 运行 Windows 上的本地完全相同的命令(当然是调整路径)可以正常工作。问题不在于 Flyway 或整体指挥结构。这与 AWS CodeBuild 上 Ubuntu 上 Docker 容器的 运行 内部结构和那里的权限有关(也许是权限,也许是其他东西,我是开放的)。

有人知道如何解决这个问题吗?

您需要为您的 CodeBuild 项目启用 Privileged Mode

容器没有对主机的写入权限。您可以尝试以下操作,将工件保存到容器并使用 docker cp 将工件复制到主机。

container=$(docker create -v <flywaymigrationspathonhost>:/flyway/sql flyway/flyway migrate -dryRunOutput=/flyway/reports/changes.sql -schemas=dbo -user=youruser -password=yourpass -url=<yourjdbcurl> -licenseKey=<licensekey>)
docker start -a ${container}
docker cp ${container}:/flyway/reports/changes.sql <hostpath>