标签: docker

使用 nc 将文件从 Docker 容器发送到主机:为什么主机 nc 过早关闭连接?

以下 BASH 脚本在 Docker 容器中下载并构建mpv(https://github.com/mpv-player/mpv-build),并使用 netcat 将文件发送到主机(主机正在使用 netcat 侦听):

HOSTIP="192.168.1.100"
PORT="62514"

nc -v -l $PORT > mpv &

sleep 1

sudo docker run ubuntu:14.04 /bin/bash -c "\
sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
cat /etc/apt/sources.list; \
apt-get update; \
apt-get install --yes --force-yes git python-minimal; \
git clone https://github.com/mpv-player/mpv-build.git; \
cd mpv-build/; \
./update; \
apt-get install --yes --force-yes devscripts equivs; \
rm -f mpv-build-deps_*_*.deb; \
mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
./build …
Run Code Online (Sandbox Code Playgroud)

netcat docker

7
推荐指数
1
解决办法
3361
查看次数

可公开路由的 IPv6 linux 容器

我的目标是为我的每个 docker 容器拥有一个可路由的公共 IPv6 地址。我希望能够使用 IPv6 协议连接进出我的容器。

我正在使用 Linode 并且我被分配了一个公共 IPv6 池:

2600:3c01:e000:00e2:: / 64 routed to 2600:3c01::f03c:91ff:feae:d7d7
Run Code Online (Sandbox Code Playgroud)

该“路由到”地址是由 dhcp 自动配置的:

# ip -6 addr show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2600:3c01::f03c:91ff:feae:d7d7/64 scope global mngtmpaddr dynamic
       valid_lft 2591987sec preferred_lft 604787sec
    inet6 fe80::f03c:91ff:feae:d7d7/64 scope link
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

我设置了 AAAA 记录,ipv6.daaku.org以便更轻松地使用:

# nslookup -q=AAAA ipv6.daaku.org
ipv6.daaku.org  has AAAA address 2600:3c01:e000:e2::1
Run Code Online (Sandbox Code Playgroud)

为了测试,我手动分配了该地址:

# ip -6 addr add 2600:3c01:e000:00e2::1/64 dev eth0
# ip -6 addr show …
Run Code Online (Sandbox Code Playgroud)

ipv6 containers docker

7
推荐指数
1
解决办法
2120
查看次数

Nginx:在supervisord下运行nginx时如何使用docker日志收集器

官方 nginx docker镜像 ( Dockerfile ) 使用以下技巧将其日志传递到 stdout 和 stderr,以便它们被 docker 日志收集器捕获并使用docker logs <container-name>以下命令查看:

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
Run Code Online (Sandbox Code Playgroud)

我想这样做,但我已经supervisord为PID 1我的容器,它监督nginx的过程,并捕获输出和错误,并把它放在它自己的日志文件。因此日志不会到达 docker 日志收集器。

这是我的 supervisord.conf 中的相关块

[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
priority=990
; NOTE: We do not want to redirect stdout and stderr of a nginx process to a logfile because we want docker log collector to get them.
stdout_logfile= …
Run Code Online (Sandbox Code Playgroud)

nginx logging supervisord docker

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

从 Docker 容器到 Google Kubernetes

这个有点理论性,但请耐心等待。

目前我有一个服务器运行几个 Docker 容器(4 个或 5 个,取决于日期和时间)。我计划添加另一个,就像第一个一样,甚至可能是第三个。

现在,我的问题是:我应该管理 15 个容器而不是 5 个,使用 Google Kubernetes 有什么好处吗?

此外,是否有“官方”或至少“确定性”的工作流程可以从 Docker 容器迁移到 Kubernetes 的本机单元“pods”。在你问之前,我确实知道 pod 是由容器组成的(有时甚至是一个)。我的主要问题是“dockerfiles”与 pod 配置完全不同。

有任何想法吗?

docker kubernetes

7
推荐指数
1
解决办法
1135
查看次数

无法通过暴露的端口访问链接的 docker 容器

我有一个带有两个容器的 docker-compose.yml 文件:

containerA:
...
ports:
- "80:9000"

containerB:
...
links:
- containerA
Run Code Online (Sandbox Code Playgroud)

我所期待的是有一个containerA从可达80端口containerB,但它只能通过端口号为9000的唯一可见的80端口从主机的访问。

有没有办法让容器的containerA9000 端口可以通过 80 端口访问它所链接的所有容器,而不仅仅是主机?

docker

7
推荐指数
1
解决办法
4154
查看次数

我是否需要支持 Virtuallization 的 CPU 来进行容器化?

我读过容器化比虚拟化便宜;我知道容器化使用的资源比虚拟化少,因为只涉及一个操作系统,没有虚拟化硬件。

但是我是否需要一个支持虚拟化的 CPU 来运行 Docker 等容器化,或者因为它在容器中运行使用操作系统库的应用程序,我可以在没有虚拟化的情况下在 CPU 上运行它吗?

central-processing-unit containers lxc docker

7
推荐指数
1
解决办法
1533
查看次数

在构建服务器上使用缓存构建 Docker 映像?

我们有一个 Jenkins CI 服务器,它从 Git 获取我们的代码,构建它,制作一个 Docker 镜像,然后将它发送到一些生产服务器。

我们的项目主要是用 Python 编写的,所以“构建”涉及运行

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

效果很好,只是有点慢。它必须通过网络获取包,另外还必须为其中一些构建 C 库(而且“lxml”并不小!)。

在开发中,我已经成功地pip-accel用来加速这个过程。它具有相同的接口,pip但它同时缓存 Python 下载和构建的 C 代码,所以

pip-accel install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

很快。

我想为我们的生产版本这样做,但我遇到了一些障碍。

显然,pip-accel需要一个目录来存储缓存。因为我们的 CI 服务器是运行构建的地方,所以这是放置它的合乎逻辑的地方。但是该pip install命令在一个新的 Docker 容器中运行,因此它不能只访问该服务器上的公共目录。

Docker“卷”似乎是为与容器共享目录而设计的,但我们的构建发生在内部(令人惊讶)docker build,并且只docker run允许您附加卷。您不能使用docker build.

有什么我想念的吗?如何在我docker build所在的容器之外运行并与我的主机共享缓存文件夹?

deployment python build-server pip docker

7
推荐指数
1
解决办法
1314
查看次数

从 Docker 容器发送邮件的简单方法?

我有一个在 Docker 容器内运行的备份脚本,我希望它在磁盘使用率低时向我发送电子邮件。

这是脚本:

#!/bin/bash
CURRENT=$(df /data | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90

echo "$CURRENT"

if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
    echo "Low Disk Space Alert: ${CURRENT}% used"
  mail -s 'Disk Space Alert' olalonde@gmail.com << EOF
Backup server remaining free space is critically low. Used: $CURRENT%
EOF
fi
Run Code Online (Sandbox Code Playgroud)

问题是我无法让邮件在容器内工作。这是我的 Docker 文件:

FROM ubuntu:latest
MAINTAINER olalonde@gmail.com
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
  apt-get install -y postfix && \
  apt-get install -y mailutils …
Run Code Online (Sandbox Code Playgroud)

email ubuntu docker

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

测量覆盖网络性能的正确方法

我目前正在检查不同 Docker 覆盖网络的性能(尤其是 UDP 吞吐量)。为此,我在与 Docker 覆盖网络连接的两台主机之间创建点对点连接,然后iperf在 Docker 容器内运行以检查吞吐量。我注意到每次我iperf作为客户端运行向iperf作为服务器运行的另一个容器发送数据时,客户端主机的CPU使用率达到100%。我通过运行在此处找到的以下命令获得了该结果:

top -bn1 | grep "Cpu(s)" | \
       sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
       awk '{print 100 - $1"%"}'
Run Code Online (Sandbox Code Playgroud)

因此,对我而言,吞吐量测试的限制因素似乎是主机的 CPU 容量,因为它以 100% 的速度运行并且无法产生更多流量来使网络连接饱和。我想知道这是否是一个iperf特定问题,所以我想使用不同的工具运行相同的测试,但不确定哪种替代方案最好。主机正在运行 Ubuntu。例如,我发现qperf,uperf和netpipe。

此外,更一般地说,我开始想知道吞吐量性能的瓶颈通常是什么。它不总是与CPU容量或链路带宽有关吗?哪些因素与覆盖网络没有直接关系。

这是否意味着应用程序(或覆盖网络)的吞吐量仅取决于它需要多少 CPU 周期来传输一定数量的数据以及它如何压缩它以适应它通过网络(如果这将是瓶颈)。

iperf linux-networking cpu-usage stress-testing docker

7
推荐指数
1
解决办法
655
查看次数

无法在 Ubuntu 14.04 上启动 docker:作业无法启动

我正在尝试使用官方网站 ( Docker Docs )上的说明在带有 Ubuntu 14.04 的 Vagrantbox 上安装 Docker 。安装似乎有效,但之后我无法使用sudo service docker start它启动 docker 服务,它给了我以下错误消息:

start: Job failed to start

如果我尝试,docker ps -a则会收到以下错误消息:

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

内核:Linux vagrant-ubuntu-trusty-64 3.13.0-85-generic #129-Ubuntu SMP Thu Mar 17 20:50:15 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

来自 /var/log/upstart/docker.log 的相关行

Waiting for /var/run/docker.sock Invalid value "" for flag --mtu: strconv.ParseInt: parsing "": invalid syntax

ubuntu vagrant docker

7
推荐指数
1
解决办法
7571
查看次数