docker手册 ( http://docs.docker.com/installation/ubuntulinux/#docker-and-ufw ) 指出有必要将 UFWs DEFAULT_FORWARD_POLICY 设置为“ACCEPT”,以便 docker 容器可以相互访问。
在具有可公开访问的网络接口的服务器上这样做有什么安全意义?
应该怎么做才能保护这样的 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 不够熟悉,无法很好地解释结果。
我已经使用以下命令安装了 docker un 我的 debian 7 服务器:
sudo curl -sSL https://get.docker.com/ | sh
Run Code Online (Sandbox Code Playgroud)
我现在想删除 docker,我到底如何卸载它?
我拉了一个 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) 文档说:
在这种配置下,当容器消耗内存超过200M且小于500M时,下次系统内存回收尝试将容器内存收缩到200M以下。
但这实际上意味着什么?
假设我有一个运行 Solr 的容器,并且:
docker run -m 1G --memory-reservation 768M solr
开始使用800M内存时,对容器内部的Solr进程有什么影响?没有?
是否仅当/当内存使用量随后降至 768M 以下时...此标志允许 docker 从 solr 容器中回收内存?...否则容器将继续消耗高水位内存使用情况?
这与群调度有什么关系?如果 swarm 总是为容器分配 1G 因为-m那么--memory-reservation在这种情况下没有用?
我需要在基于 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 解决此问题的任何想法,我猜也可以。
当我必须在一个图像中运行多个服务(例如 postfix 和其他邮件服务)时,我在 docker 图像中使用主管。当我将所有服务的 stdout/stderr 重定向到主管并且主管也登录到 stdout/stderr 时,我希望在控制台上的实际日志输出前面有一个前缀/标签,以了解哪个日志来自哪个服务。我找不到任何配置设置,但也许你知道一种方法。
我试图让咱们加密内正式泊坞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) 好的,这里是设置。
我们在“自带节点”配置中使用 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 配置文件的字段中放入什么。
有没有人让这些工作?
我正在尝试在 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) docker ×10
logging ×2
amazon-ecs ×1
build-server ×1
coreos ×1
debian ×1
lets-encrypt ×1
mac-osx ×1
networking ×1
port ×1
strace ×1
supervisord ×1
tail ×1
teamcity ×1
ufw ×1
windows ×1
wordpress ×1