如何在OSX上获得与docker容器的ssh连接(boot2docker)

我用boot2docker在OSX上使用docker 。 我想从我的terminal获得一个Ssh连接到一个正在运行的容器。 但我不能这样做:( 我认为这是因为Docker在虚拟机上运行。

有没有办法限制不受信任的容器调度?

我有一个应用程序,我想授予启动短期任务的权限,并将其作为docker容器安排。 我只是想通过docker run来做这个。 由于我想使攻击面尽可能小,所以我将该应用程序视为不可信。 因此,它可以运行任意的docker run命令(如果代码库包含bug或容器被入侵,input不正确地在某处逃脱等)。 这就是为什么我想在某些方面限制该应用程序(有效的调度程序): 防止 – –privileged使用 强制执行–read-only标志 强制执行内存和CPU限制 我看了几个选项: SELinux的 需要在主机级别设置selinux策略,然后通过daemon级别的–selinux-enabled标志在容器内传播。 然而,调度程序可以通过run –privileged覆盖这个。 seccompconfiguration文件 这些仅在启动容器时应用(seccomp标志可用于docker docker run ) AppArmor的 这可以(再次)通过–privileged在调度程序级别上被覆盖 docker守护进程–exec-opts标志 实际上只有一个选项可用于此标志( native.cgroupdriver ) 看起来Docker默认devise为信任容器调度器。 有谁知道这是否是一个devise决定? 是否有任何其他可能的解决scheme可用瓦特/当前最新的docker版本,我错过了? 我还研究了Kubernetes及其限制范围和资源配额 ,可以应用到K8S命名空间,这看起来很有趣,假设有一种方法来强制某些调度器只使用某些命名空间。 但是,这会将这个问题的范围扩大到运行K8S群集。

docker-compose服务中没有互联网

我无法通过docker-compose容器访问外部networking。 考虑下面的docker-compose文件: version: '2' services: nginx: image: nginx 使用简单的docker run -it nginx bash我设法到达外部IP或Internet IP( ping www.google.com )。 另一方面,如果我使用docker-compose并附加到容器,我无法访问外部IP地址/ DNS。 docker信息: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 1 Server Version: 1.12.1 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 7 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: […]

如何在Docker中使用音量组成postgres?

这是我正在使用的图像 。 我把它命名为posgres_test 如果我单独运行图像 docker run -i -t -v="test_volume:/var/lib/postgresql" -p 5432:5432 posgres_test 我可以访问它 psql -h 192.168.99.100 -p 5432 -U pguser -W pgdb 或者我可以用我的golang应用程序访问它 // host is set to postgres db, err := sql.Open("postgres", "postgres://pguser:pguser@postgres:5432/pgdb") // table test_db is manually created. rows, err := db.Query("SELECT name FROM test_db WHERE) 但是,如果我使用docker compose docker-compose.yml version: "2" services: postgres: […]

作为docker集装箱运行的Celery&RabbitMQ:收到types为'…'的未注册任务

我对docker,芹菜和rabbitMQ比较陌生。 在我们的项目中,我们目前有以下设置:1个物理主机,运行多个docker容器: 1x rabbitmq:3pipe理容器 # pull image from docker hub and install docker pull rabbitmq:3-management # run docker image docker run -d -e RABBITMQ_NODENAME=my-rabbit –name some-rabbit -p 8080:15672 -p 5672:5672 rabbitmq:3-management 1个芹菜容器 # pull docker image from docker hub docker pull celery # run celery container docker run –link some-rabbit:rabbit –name some-celery -d celery (有更多的容器,但他们不应该对问题做任何事情) […]

Docker和Ansible如何配合实现Continuos Delivery / Continuous Deployment

我不熟悉configurationpipe理和部署工具。 我必须实施一个持续交付/持续部署工具,用于我曾经投入的最有趣的项目之一。 首先,我个人对AWS感到满意,我知道Ansible是什么,它背后的逻辑和目的。 我对Docker没有同样的理解,但是我明白了。 我经历了很多互联网资源,但是我无法得到大局。 我一直在挣扎的是他们如何融合在一起。 使用Ansible ,我可以将我的基础架构作为代码来pipe理; 构buildEC2实例,安装软件包…我甚至可以通过拉取代码,修改configuration文件和启动Web服务器来部署完整的应用程序。 Docker本身就是一个打包应用程序的工具,并确保它可以在你部署的任何地方运行。 我的问题是: Docker(或Ansible和Docker)如何扩展持续集成过程! 假设我们有一个源代码库,团队成员完成了一个function的工作,他们推动他们的工作。 jenkins检测到这一点,运行所有的验收/单元/集成testing套件,如果他们都通过了,它宣称它是一个稳定的构build。 Docker如何适应这里? 我的意思是,当团队推动他们的工作时,Jenkins是否必须拉取应用程序中编码的Docker文件源,构build应用程序的图像,启动容器并运行所有testing,或者运行经典testing一切都很好,那么它会从Docker文件构buildDocker镜像并将其保存在一个私有的地方? jenkins应该使用xyz标记最终的图像! Docker容器configuration: 假设我们有Jenkins构build的映像存储在某个地方,如何处理将相同的映像部署到不同的环境中,甚至是不同的configuration参数(Vhostsconfiguration,数据库主机,队列URL,S3端点等等)什么是最灵活的方式来处理这个问题而不破坏Docker原则? 这些configuration是否在构build时或者基于它的容器开始时支持在映像中,如果是的话,它们是如何被注入的? Ansible和Docker : Ansible提供了一个Docker模块来pipe理Docker容器。 假设我解决了上面提到的问题,当我想部署我的应用程序的新版本xtz时,我告诉Ansible将它从存储的位置拉出来,启动应用程序容器,那么如何注入configuration设置? Ansible在运行之前是否需要loginDocker镜像(这听起来令人费解),并且使用Jinja2模板和经典主机一样! 如果没有,这是如何处理?! 对不起,如果这是一个很长的问题,或者我拼错了一些东西,但这是我的想法。 我在过去的两周被封锁了,我无法弄清楚正确的工作stream程。 我希望这是未来读者的参考。 请阅读您的经验和解决scheme非常有帮助,因为这看起来像一个常见的工作stream程。 先谢谢你。 任何帮助深表感谢。

我需要手动标记“最新”时推送到docker公共存储库?

假设我有一个图像me/mystuff:v0.0.1 我发现如果我把它推到版本库: docker push me/mystuff:v0.0.1 latest不会创build,并从另一台机器拉,它会抱怨,例如 ssh me@faraway (faraway) $ docker run -it me/mystuff /bin/bash 将导致me/mystuff:latest未find错误me/mystuff:latest 我可以添加最新的标签并显式推送到公共存储库: docker login me docker tag me/mystuff:v0.0.1 me/mystuff:latest docker push me/mystuff:latest 然后从另一台机器: docker pull me/mystuff 将工作,因为最新的存在。 我也发现一旦最新版本存在,当新的编号版本被推送时,它不会自动更新。 我可以以某种方式消除手动标记最新的这一步,并有最新的自动指向最新的编号版本? 还是出于某种原因,如允许从生产版本(最新标记)分离开发版本(仅用vN.NN标记)?

在一个Docker容器中运行多个应用程序

这个问题是我继续探索Docker的一部分,在某些方面跟随了我之前的一个问题 。 我现在已经了解了如何通过连接一堆Docker容器来获得完整的应用程序栈(实际上是一个微型VPS)。 例如,可以创build一个堆栈,为Apache + PHP5提供一组扩展+ Redis + MemCached + MySQL,它们都运行在Ubuntu之上,有或没有额外的数据容器,以便于序列化用户数据。 所有非常好和优雅。 但是,我不禁想知道…。 5个容器来运行这个小VPS(从Apache + PHP5进入一个容器后,我计算5个而不是6个)。 那么假设我有100个这样的VPS正在运行? 这意味着我有500个容器在运行! 我理解这里的论点 – 很容易编写新的应用程序堆栈,更新堆栈的一个组件等等。但是这样操作没有不必要的开销吗? 假设我这样做了 把我所有的应用程序放在一个容器中 写一个小小的shell脚本 !/ bin / bash服务memcached启动服务redis-server start ….服务apache2启动while:do:done 在我的Dockerfile中 ADD start.sh /usr/local/bin/start.sh RUN chmod +x /usr/local/bin/start.sh …. ENTRYPOINT ["/bin/bash"] CMD ["/usr/local/bin/start.sh"] 然后我把那个容器运行起来 docker run -d -p 8080:80 -v /var/droidos/site:/var/www/html -v /var/droidos/logs:/var/log/apache2 droidos/minivps 我在做生意 […]

Docker的dumb-init有多重要?

我希望这个问题不会primarily opinion-based ,但有一个客观的答案。 我已经阅读了dumb-init,一个Docker容器的init系统介绍,它广泛地描述了为什么以及如何使用dumb-init 。 说实话,对于那些对Linux进程结构不太熟练的人来说,这听起来相当戏剧化,而且如果你不使用dumb-init话,就好像你正在做的事情是完全错误的。 这就是为什么我正在考虑在我自己的Docker镜像中使用它的原因是什么让我无法做到这一点是事实,我还没有find一个官方的Docker镜像使用它。 以mongo为例:他们直接调用mongod 。 以postgres为例:他们直接调用postgres 。 以节点为例,他们直接调用node 。 … 如果dumb-init 如此重要 – 为什么显然没有人使用它? 我在这里错过了什么?

Docker和.bash_history

有没有办法与.bash_history容器共享一个.bash_history卷,以便每次进入一个shell我有我的bash历史可用于滚动? 如果能够用IPython来做同样的事情也会很棒。