标签: docker

在 CoreOS 集群上通过 NFS 共享磁盘?

CoreOS 集群是否可以共享磁盘空间,例如使用 NFS?如果是这样,人们会怎么做呢?(例如,在一个节点有大量磁盘空间的情况下)。例如,这对于避免让每个节点必须下载和存储它自己的 docker 图像库或跨节点共享主目录空间非常有用。

因为我们不能直接在 CoreOS 中安装额外的软件,我想人们必须编写一个容器来安装 NFS(例如nfs-kernel-server在基于 Ubuntu 的容器上)。

我不知道这是否可行,但我希望有一些既定的方法来跨 CoreOS 集群共享磁盘空间(毕竟,这似乎是对集群的普遍期望,也许我下面的建议比必要的更复杂) . 只是为了提供一些反馈的素材,这是我目前的想法:

提供 NFS 的主机端似乎是一个合理的 docker 任务,例如我想象一个 Dockerfile 像:

FROM ubuntu:14.04
ENV CLIENT_IP 11.111.111.111          
RUN apt-get update && apt-get install -y nfs-kernel-server supervisor
RUN mkdir /var/nfs && chown nobody:nogroup /var/nfs
RUN echo "/home       ${CLIENT_IP}(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports
RUN echo "/var/nfs    ${CLIENT_IP}(rw,sync,no_subtree_check)" >> /etc/exports
RUN exportfs -a
CMD service nfs-kernel-server start
Run Code Online (Sandbox Code Playgroud)

WhereCLIENT_IP已正确填写(也许我们需要用调用supervisord或类似方法替换 CMD以使其持久化,但您明白了)

那么,在运行这个容器时,我们如何适当地链接卷呢?我们将从 CoreOS 主机链接哪个卷?或者我是否需要添加一些东西--net="host"来使客户端可用?

docker run -v /home:/home …
Run Code Online (Sandbox Code Playgroud)

nfs docker coreos

5
推荐指数
2
解决办法
6063
查看次数

容器重启后,从外部到 docker 容器的 UDP 流量被丢弃

以下情况:我有一个带有 Ubuntu 14.04LTS 的硬件盒作为 docker 1.4 的主机我在多个容器中运行一个 ELK 堆栈。目前,logstash 容器仅暴露端口 514 来收集系统日志输入。

在某些情况下,重新启动容器后,系统日志流量不再转发到容器。

'iptables -nvL' 显示在容器启动期间没有流量匹配应用于转发链的规则。INPUT 链的流量计数器明显高于 FORWARD 链。

我注意到所有向世界公开 UDP 端口的容器上的这种行为,具有基于 TCP 的服务的容器按预期工作。

重新启动容器和 docker 服务没有成功。

我主要收集防火墙流量日志,所以系统日志流量是相当稳定的。我每秒收集大约 1,5k 个 Syslog 陷阱。

我的解决方法是将所有到主机的流量停止大约 10 秒(目前通过将上游路由器上的流量黑洞化)

在一个防火墙节点上停止 syslog 导出几秒钟后,来自此特定防火墙的流量按预期转发到容器。但仅从这一个。

我认为这是iptables的问题。看来 iptables 将转发信息缓存了几秒钟,并且只要存在流量就会忽略任何新的应用规则。

我这里没有对 iptables 做额外的配置。一切都由 docker 完成。我没有安装 ufw、conntrackd 或任何东西。

任何建议如何解决这个问题?

最好的问候安德烈亚斯

ubuntu iptables syslog docker

5
推荐指数
1
解决办法
5370
查看次数

如何设置 docker 容器以在专用网络上进行通信?

我在机架空间有一个小型集群,其专用网络范围为 192.168.3.0/24。我希望我的工作人员服务使用这个网络相互交谈,但不知道如何让 docker 允许这样做。

我的理想配置是一个面向公众的容器,它代理与工作人员的连接,然后该工作人员可以与专用网络中的各种服务进行通信以完成其工作。

eth0 -> load balancer --> 192.168.3.3:80 --> 192.168.3.5:1234 (db)
                      \-> 192.168.3.4:80 /
                       \> 192.168.3.5:80/
Run Code Online (Sandbox Code Playgroud)

如果所有工人都在同一台机器上,我可以用它来完成这项工作,docker run --link ...但由于他们在不同的机器上,这将行不通。

上面示例中的工作人员使用类似于以下的命令启动:

docker run -d -p $PRIVATE_IPV4:80:80 myworker
Run Code Online (Sandbox Code Playgroud)

数据库是这样开始的:

docker run -d -p $PRIVATE_IPV4:1234:1234 mydb
Run Code Online (Sandbox Code Playgroud)

从主机我可以很好地与每个容器通信,但每个容器都不能路由到任何其他容器。IEcurl http://192.168.3.4在主机上工作,但不能从主机上运行的容器中工作。

在这种情况下,负载均衡器是 nginx 启动的,如下所示:

docker run -d -p $PUBLIC_IPV4:80:80 nginx
Run Code Online (Sandbox Code Playgroud)

配置文件

upstream app {
  server 192.168.3.3:80;
  server 192.168.3.4:80;
  server 192.168.3.5:80;
}
...
Run Code Online (Sandbox Code Playgroud)

这似乎是一个非常标准的配置。我究竟做错了什么?

linux-networking docker

5
推荐指数
1
解决办法
280
查看次数

如何解决此语言环境问题?

我正在设置一个 Docker 版本,它允许我从 Linux 连接到 SQL Server。据我所知,这与这个问题几乎无关,但可能,因为我很困惑!

我的映像基于 Debian,因为 Debian 小而轻。我怀疑我错过了一些语言环境的东西,这就是导致这种情况的原因,但我不知道。

无论如何,这是我的命令+错误:

$ perl -MDBI -MData::Dumper -E'say Dumper(DBI->connect("dbi:ODBC:server=10.6.6.17;port=1433;database=Lynx;driver=ODBC Driver 11 for SQL Server;uid=sa;pwd=password")->selectall_arrayref("SELECT * FROM Setup"))'
terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid
Run Code Online (Sandbox Code Playgroud)

对我来说,这看起来像是 C++ 错误,可能与 SQL Server ODBC 驱动程序有关;它可能是 C++。

我试过了:

  • export LC_ALL=C
  • export LC_ALL=C.UTF-8
  • export LC_ALL=en_US.UTF-8
  • export LC_ALL=en_US
  • export LC_ALL=POSIX
  • apt-get install locales
  • locale-gen

并且取得了零进展。有任何想法吗?

附录:以下是我实际的 Dockerfile;它肯定是不完整的并且可以使用一些爱,但它可能会帮助您重现此错误(请注意,我的命令中的连接字符串最终需要调整以指向真正的 SQL Server,但不会重现此问题。)

FROM perl:5.20.1

RUN wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz && \
    tar xf unixODBC-2.3.2.tar.gz                                   && \
    cd …
Run Code Online (Sandbox Code Playgroud)

debian localization docker

5
推荐指数
1
解决办法
9504
查看次数

有没有类似于 Windows Server 的 Docker Containers 的技术?

Docker 容器(基本上是应用程序隔离,afaik)看起来很方便,但它们仅适用于 Linux。甚至“Docker Container for Windows”基本上只是将 Linux VM 安装到 Windows 上的 VirtualBox 中。

那么有没有像 Docker Container 这样的 Windows Server 技术呢?

windows windows-server-2008 containers docker windows-server-2016

5
推荐指数
1
解决办法
721
查看次数

Docker 镜像构建挂在“pacman -S ...”

我正在尝试从官方 Arch Linux 映像构建 Docker 映像。这些是我到目前为止所做的事情:

我拉了官方的 Arch Linux 镜像:

docker pull base/archlinux
Run Code Online (Sandbox Code Playgroud)

我写了这个“Dockerfile”:

# Set base image
FROM base/archlinux:latest

# Fix mirrorlist file
#RUN rm /etc/pacman.d/mirrorlist
#RUN echo "Server = http://..." >> /etc/pacman.d/mirrorlist
#RUN echo "Server = http://..." >> /etc/pacman.d/mirrorlist
#RUN echo "Server = http://..." >> /etc/pacman.d/mirrorlist
#RUN echo "Server = http://..." >> /etc/pacman.d/mirrorlist

# Update pacman and install packages
RUN pacman-db-upgrade
RUN pacman -Syyu --noconfirm
RUN pacman -S --noconfirm nodejs phantomjs cronie

# Make cronjobs
RUN echo "*/2 …
Run Code Online (Sandbox Code Playgroud)

arch-linux containers docker

5
推荐指数
1
解决办法
4036
查看次数

是否有任何理由*不*在 Docker 容器中运行 HAProxy?

如果我在容器中运行 HAProxy(或 Nginx)与直接在主机上安装它,性能和/或稳定性会受到影响吗?

haproxy containers docker

5
推荐指数
1
解决办法
3264
查看次数

如何使用 Amazon EC2 Container Service 扩展一个容器

我是使用 Amazon ECS 的新手,我想知道如何设置服务以便轻松扩展/缩减一个容器。

这是我的项目架构:

  • 网站:网站的容器,仅提供 html 页面和 javascript/css/images。听80。
  • api:在 NodeJS 中开发的 API 容器,提供 json 服务。在 443 上收听。
  • rabbitmq:带有rabbitmq的容器。api 容器链接到它。
  • worker:等待来自rabbitmq的订单(它也链接到它)并处理它们,然后将答案发送回rabbitmq的容器。

目前,我只为我的所有容器创建了一个任务定义,而在我的集群中,我只有一项服务。我在 API 上也有一个负载平衡器(所以我可以通过 DNS 名称从网站访问它)。

它工作正常,但我希望能够启动更多的工作人员,而不启动其他一切,而且我现在似乎无法做到这一点(如果我错了,请纠正我)。所以我有几个问题:

  • 我需要创建单独的任务定义吗?
  • 我需要创建单独的服务吗?
  • 如果我为每个容器创建一个任务定义(因此前面是website,后面是api,broker是rabbitmq和worker是worker),我是否仍然能够将容器链接在一起,即使它们不在同一个任务定义中?

这是我当前的任务定义:

{
  "taskDefinitionArn": "arn:aws:ecs:ap-southeast-2:347930943102:task-definition/Flipendo:4",
  "revision": 4,
  "containerDefinitions": [
    {
      "volumesFrom": [],
      "portMappings": [],
      "command": [],
      "environment": [
      ],
      "essential": true,
      "entryPoint": [],
      "links": [
        "rabbitmq"
      ],
      "mountPoints": [],
      "memory": 2048,
      "name": "worker",
      "cpu": …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 amazon-web-services docker amazon-ecs

5
推荐指数
1
解决办法
1006
查看次数

Docker 容器无法访问 VPN 后面的主机

我有一个 VPN 网关,它允许远程访问子网为 171.30.0.0/16 的网络。

我有一个带有 ubuntu 14.04 和 strongswan 的本地机器设置,它使用 IKEv2 RSA 连接到该 VPN 服务器,并且在连接时,我能够成功地从我的 ubuntu 机器 ping 我的 VPN 后面的所有主机(例如 171.30.0.200)。VPN 服务器将虚拟 IP 范围 192.168.40.0/24 之外的 IP 分配给客户端。假设我的 ubuntu 机器在连接时收到 IP 192.168.41.1。

http://postimg.org/image/gad07tmez/

在这台 ubuntu 机器上,我安装了 docker,我必须从 docker 映像之一访问 VPN 后面的一台机器(171.30.0.200)。我无法从 docker 容器内部 ping 那个服务器,即使从 docker 主机(这是 ubuntu 机器)ping 成功。有趣的是,从 docker 容器内部 ping 192.168.41.1 是成功的。

知道问题是什么云吗?

ubuntu vpn strongswan docker ikev2

5
推荐指数
1
解决办法
3793
查看次数

获取应用程序日志。命令在实例上失败

目前使用 Amazon Web 服务,我在 Elastic Beanstalk(具有绿色集群健康状况)上成功部署了多个应用程序作为 Docker 容器。

然而,当我尝试使用控制台获取日志时出现了问题;当我执行“请求日志”时,没有找到日志。当我在请求日志后返回仪表板时,出现了一个新事件/错误:

[实例:i-123456789] 命令在实例上失败。返回代码:1 输出:bundleLogs.py --conf-path '/opt/elasticbeanstalk/tasks/bundlelogs.d/*' --location-prefix 'resources/environments/logs/bundle/' 无法在任何地方执行方法 publish_contents_from_filename的目标对象。有关更多详细信息,请使用控制台或 EB CLI 检查 /var/log/eb-activity.log。

为了解决这个问题,我通过 SSH 连接到我的集群并使用以下命令在我的 Docker 容器中查找日志:

sudo docker exec myinstance cat /var/log/logstash_activity.log
Run Code Online (Sandbox Code Playgroud)

我的日志按预期找到。

为了了解有关该错误的更多信息,我查看了 /var/log/eb-activity.log 并发现了以下几行:

[2015-07-06T12:54:30.137Z] INFO  [26993] - [CMD-BundleLogs] : Starting activity...
[2015-07-06T12:54:30.363Z] INFO  [26993] - [CMD-BundleLogs/AddonsBefore] : Starting activity...
[2015-07-06T12:54:30.363Z] INFO  [26993] - [CMD-BundleLogs/AddonsBefore] : Completed activity.
[2015-07-06T12:54:30.363Z] INFO  [26993] - [CMD-BundleLogs/BundleLogs] : Starting activity...
[2015-07-06T12:54:30.364Z] INFO  [26993] - [CMD-BundleLogs/BundleLogs/BundleLogs] : Starting activity...
[2015-07-06T12:54:30.627Z] INFO  [26993] …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-beanstalk docker

5
推荐指数
1
解决办法
1659
查看次数