我可以在主机上运行 docker 命令吗?我在 docker 容器内安装了
aws
,现在我可以以某种方式在主机上使用 aws
命令(在幕后将使用 docker 容器的 aws)吗?
我的情况是这样的:我在生产主机上有数据库备份。现在我有 Jenkins cron 作业,它将从数据库容器中获取 sql 文件并将其放入服务器文件夹中。现在我也希望jenkins将这个备份文件上传到AWS存储上,但是在主机上我没有安装aws,而且我不想在主机上安装除docker之外的任何东西,所以我认为aws应该安装在容器内。
您不能直接执行此操作。 Docker 容器和镜像具有隔离的文件系统,主机和容器不能直接访问彼此的文件系统和二进制文件。
理论上,您可以编写一个封装
docker run
的 shell 脚本,将其命名为 aws
,然后将其放入您的 $PATH
中
#!/bin/sh
exec docker run --rm -it awscli aws "$@"
但这不能很好地扩展,需要您在主机上拥有根级权限,并且您将无法使用以下命令访问主机上的文件(如
~/.aws/config
)或环境变量(如$AWS_ACCESS_KEY_ID
)额外的设置。
您只需在主机上安装软件即可正常工作。没有必要使用 Docker 来完成所有事情。
由于 docker 主机是一个有用户的服务器,您可以通过容器中的
ssh
在主机上远程执行命令。示例:
docker_hostname="my-host"
docker_host_user="jimmyneutron"
ssh $docker_host_user@$docker_hostname 'echo $HOSTNAME' # returns: my-host
现在您还可以从容器中执行 docker 命令,就像在主机上一样。示例:
ssh $docker_host_user@$docker_hostname "docker exec myOtherContainer sh -c 'aws ...'
如果需要,您可以设置基于公钥的身份验证,以在主机上进行无密码 ssh 访问。请参阅 https://linuxize.com/post/how-to-setup-passwordless-ssh-login/