标签: docker

将 UFW default_forward_policy 设置为接受的安全隐患?

docker手册 ( http://docs.docker.com/installation/ubuntulinux/#docker-and-ufw ) 指出有必要将 UFWs DEFAULT_FORWARD_POLICY 设置为“ACCEPT”,以便 docker 容器可以相互访问。

  1. 在具有可公开访问的网络接口的服务器上这样做有什么安全意义?

  2. 应该怎么做才能保护这样的 docker 主机?

ufw docker

8
推荐指数
1
解决办法
3810
查看次数

tail -f 未跟踪 Docker 容器中的日志文件

我看到tail -f在 CoreOS 的 Docker 容器内运行命令时出现了一些奇怪的行为。

我能想到的许多变量可能会导致问题,但我不确定首先需要做什么来排除故障。在 CoreOS 上,我正在运行支持 overlayfs 的最新版本,以及较新版本的 Docker (1.4.1)。

有趣的是,我能够在运行不同版本 Docker (1.3) 的不同主机操作系统 (Ubuntu 14.04) 上成功跟踪日志。

如果这有助于排除故障,我可以生成 strace 日志,它们似乎在主机之间存在显着差异。例如,在不工作的主机上,在 strace 输出中读入以下内容后,strace 停止:

04:03:03 inotify_add_watch(4, "f017f0a1-a1e9-11e4-90bc-027e0f87cac6-paster.log", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1 <0.000028>
04:03:03 fstat(3, {st_mode=S_IFREG|0644, st_size=12229, ...}) = 0 <0.000022>
04:03:03 read(4, 0x7711f0, 64)          = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <3.101545>
Run Code Online (Sandbox Code Playgroud)

我只是对 strace 不够熟悉,无法很好地解释结果。

logging tail strace docker coreos

8
推荐指数
1
解决办法
6288
查看次数

通过 curl 安装时卸载 Docker

我已经使用以下命令安装了 docker un 我的 debian 7 服务器:

sudo curl -sSL https://get.docker.com/ | sh
Run Code Online (Sandbox Code Playgroud)

我现在想删除 docker,我到底如何卸载它?

debian docker

8
推荐指数
1
解决办法
2万
查看次数

尝试浏览映射到 Docker 容器的端口时获取“ERR_CONNECTION_REFUSED”

我拉了一个 Docker 镜像:

$ docker pull ghost
Run Code Online (Sandbox Code Playgroud)

并从图像运行一个容器:

$ docker run --name test-ghost -p 8080:2368 -d ghost
7d984e974f6a75fe18b3d397b5c8f0a428928a2be9df83f0d61a679aa5f537fc
Run Code Online (Sandbox Code Playgroud)

我的理解是,-p交换机会将主机上的端口 (8080) 映射到 Docker 内部的端口 (2368),以便我可以从 Docker 外部(即从我的主机)访问在 Docker 内运行的 Web 服务器。

但是,当我尝试从我的主机浏览 Chrome 中的以下任何地址时:

http://localhost:8080/
http://0.0.0.0:8080/
http://127.0.0.1:8080/
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

This webpage is not available

ERR_CONNECTION_REFUSED
Run Code Online (Sandbox Code Playgroud)

这似乎可能是连接问题,而不是容器内部的问题,因为当我检查容器内部正在运行的进程时,似乎 NodeJS 正在运行:

$ docker top test-ghost
UID          PID           PPID      ...  CMD
docker       4290          1028      ...  npm
docker       4324          4290      ...  sh -c node index
docker       4325          4324      ...  node index
Run Code Online (Sandbox Code Playgroud)

但似乎没有在端口 8080 上侦听:

$ …
Run Code Online (Sandbox Code Playgroud)

networking port port-forwarding mac-osx docker

8
推荐指数
1
解决办法
2万
查看次数

--memory-reservation 标志在实践中有何作用?

文档说:

在这种配置下,当容器消耗内存超过200M且小于500M时,下次系统内存回收尝试将容器内存收缩到200M以下。

但这实际上意味着什么?

假设我有一个运行 Solr 的容器,并且:
docker run -m 1G --memory-reservation 768M solr

开始使用800M内存时,对容器内部的Solr进程有什么影响?没有?

是否仅当/当内存使用量随后降至 768M 以下时...此标志允许 docker 从 solr 容器中回收内存?...否则容器将继续消耗高水位内存使用情况?

这与群调度有什么关系?如果 swarm 总是为容器分配 1G 因为-m那么--memory-reservation在这种情况下没有用?

docker

8
推荐指数
1
解决办法
6262
查看次数

Windows:如何启动 docker VM at 系统启动

我需要在基于 Windows 的构建服务器上运行 docker(我通常使用 Arch/Debian Linux),但我找不到让 docker VM 在系统启动时自动启动的方法。在 Linux 上这将是一项服务,但在 Windows 上似乎并非如此。

我按照https://docs.docker.com/engine/installation/windows/上的说明操作,当我使用 $ docker-machine create 启动 docker VM 时,一切都会运行,但如何将其作为 Windows 服务或类似服务?

目标是能够使用构建 Docker 镜像,作为容器启动并针对它们运行 e2e 测试。由于我们正在使用 TeamCity 来构建有关使用 TeamCity 解决此问题的任何想法,我猜也可以。

windows windows-service teamcity build-server docker

8
推荐指数
2
解决办法
1万
查看次数

如何将服务的前缀/标签添加到主管标准输出输出

当我必须在一个图像中运行多个服务(例如 postfix 和其他邮件服务)时,我在 docker 图像中使用主管。当我将所有服务的 stdout/stderr 重定向到主管并且主管也登录到 stdout/stderr 时,我希望在控制台上的实际日志输出前面有一个前缀/标签,以了解哪个日志来自哪个服务。我找不到任何配置设置,但也许你知道一种方法。

以下是 Foreman 的示例: 工头日志输出

logging supervisord docker

8
推荐指数
2
解决办法
1809
查看次数

在 Docker 的官方 Wordpress 容器中使用 Let's Encrypt

我试图让咱们加密内正式泊坞WordPress的容器。

设置环境

$ cat docker-compose.yml
wordpress:
  hostname: some.fqdn.com
  image: wordpress
  links:
    - db:mysql
  ports:
    - 80:80
    - 443:443

db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: example

$ docker-compose -f docker-compose.yml up -d
$ docker exec -ti root_wordpress_1 bash
Run Code Online (Sandbox Code Playgroud)

安装让我们加密

$ apt-get update && apt-get install -y git-core
[...]
$ cd /usr/local
$ git clone https://github.com/letsencrypt/letsencrypt
[...] 
$ cd letsencrypt/
$ ./letsencrypt-auto --apache
Checking for new version...
Requesting root privileges to run letsencrypt...
   /root/.local/share/letsencrypt/bin/letsencrypt --apache
An unexpected error occurred:
PythonDialogBug
Please …
Run Code Online (Sandbox Code Playgroud)

wordpress docker lets-encrypt

8
推荐指数
1
解决办法
2327
查看次数

在 Docker Cloud 中使用 New Relic

好的,这里是设置。

我们在“自带节点”配置中使用 docker cloud。我们的节点运行的是 Ubuntu 14.04。

我们已经安装dockercloud-agent并nrsysmond按照相应教程的要求进行安装。New Relic 代理正在报告数据,我们可以通过 docker cloud 部署我们的堆栈,所以显然两者都在工作。

但是,New Relic 没有报告 docker 容器指标。我找到了一份文件,表明这可能是“较旧的”操作系统可能会将其 cgroup 文件存储在“非默认位置”中。

不幸的是,我不知道旧在这种情况下的含义,或者是否/sys/fs/cgroup/devices/docker是“非默认”位置,或者如果是,cgroup_root在 New Relic 配置文件的字段中放入什么。

有没有人让这些工作?

docker

8
推荐指数
0
解决办法
97
查看次数

如何获取特定 AWS ECS 任务的 IP 地址?

我正在尝试在 ECS 中构建我自己的服务发现版本,因为我希望向上和向下扩展的服务不是 HTTP 服务器,因此无法由 ELB 管理。此外,ECS 尚不支持 docker 的用户定义网络功能,这将是进行服务发现的另一种方式。正如该问题讨论中提到的:

目前服务发现是一个巨大的痛苦,需要另一个服务(它本身通常是基于集群的,自我发现然后侦听其他服务)。这是一个凌乱的解决方案,更不用说实施和维护更令人讨厌的 Lambda“解决方案”了。

因此,我将采用令人讨厌的 Lambda“解决方案”路线来代替其他选择。我需要构建这个 hack 服务发现的主要内容是在我的 EC2 主机上运行的每个 docker 容器的 IP 地址。

通过 SSH 连接到充当我的 ECS 容器实例之一的 EC2 服务器,我可以运行docker ps以获取每个正在运行的 docker 容器的容器 ID。对于任何给定的 containerId,我可以运行docker inspect ${containerId}它返回 JSON,包括有关该容器的许多详细信息,特别是NetworkSettings.IPAddress与该容器的绑定(我的发现实现所需的主要内容)。

我正在尝试使用 Lambda 中的 AWS 开发工具包来获取此值。到目前为止,这是我的 Lambda 函数(您也应该能够运行它——这里没有特定于我的设置):

exports.handler = (event, context, callback) => {
    var AWS = require('aws-sdk'),
        ecs = new AWS.ECS({"apiVersion": '2014-11-13'});

    ecs.listClusters({}, (err, data) => {
        data.clusterArns.map((clusterArn) => {
            ecs.listTasks({
                cluster: clusterArn
            }, …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services docker amazon-ecs amazon-lambda

8
推荐指数
2
解决办法
9876
查看次数