首页 > 解决方案 > 我们如何将本地机器中的 aws 地址发送到在 docker 容器中运行的 jenkins 映像?

问题描述

我正在尝试将主机中的 aws 路径发送到将在 docker 容器中运行的 jenkins。因此,我下载了 jenkins 映像,并尝试在 jenkins 管道中使用 aws cli 命令来构建 nodejs 应用程序,然后将其部署到 s3 存储桶。对于我通过 docker 运行的 jenkins 映像中的 aws cli。据我所知,一旦你在 docker 容器中运行任何图像,那么它本身就是一个单独的环境,所以詹金斯不会知道我在我的 mac 中安装了 aws,除非我在我的 mac 中发送它的 aws 地址,这就是我正在尝试做

-v $(which aws): $(which aws)

命令。

docker run -d -p 8080:8080 -p 50000:50000 -v ~/jenkins_directory:/var/jenkins_home -v $(which aws):$(which aws) jenkins/jenkins:2.190.2

但是,在我在命令行中运行此容器后,它显示以下错误响应

docker:来自守护进程的错误响应:Mounts denied:路径 /usr/local/bin/aws 未从 OS X 共享,并且 Docker 不知道。

根据我在stackoverflow中找到的一些答案,我尝试在Docker文件共享面板中添加aws的地址。当我在docker中添加aws的地址时,它再次显示

路径 /usr 由 Docker 保留,但是可以导出特定的子目录。

我已经能够解决这个问题。我尝试添加整个

usr/本地/bin/aws

在 docker 文件共享面板中,但仍然显示相同的问题。有谁知道我们可以做些什么其他事情来将我的本地容器中的 aws 地址发送到我试图在 docker 容器中运行的 jenkins 映像?

标签: macosamazon-web-servicesdockerjenkins

解决方案


您需要安装aws-cli在您的 docker 映像中,然后您就可以在您的容器中使用 aws-cli。

FROM jenkins/jenkins:2.190.2
USER root
RUN apt-get update && \
    apt-get install awscli  -y
USER jenkins

-v或卷不是为绑定主机可执行文件而设计的,而是为持久存储的文件和文件夹而设计的。如果您需要可执行文件,则需要添加 docker 映像。

为了能够保存(持久化)数据并在容器之间共享数据,Docker 提出了卷的概念。很简单,卷是默认联合文件系统之外的目录(或文件),并且作为主机文件系统上的普通目录和文件存在。

理解卷泊坞窗

对于这个问题

我正在尝试在 jenkins 管道中使用 aws CLI 命令来构建 nodejs 应用程序,然后将其部署到 s3 存储桶。

如果您在 AWS 内部,您可以将IAM 角色分配给 Jenkins 服务器,并且您不需要绑定主机密钥。

或者,如果您在 AWS 之外,那么您只需要绑定主机 aws config 和 credentials ,

docker run -d -p 8080:8080 -p 50000:50000 -v ~/jenkins_directory:/var/jenkins_home -v $HOME/.aws/:/var/jenkins_home/.aws/ jenkins/jenkins:2.190.2

推荐阅读