标签: docker

计算 Docker 容器的带宽

我试图弄清楚如何跟踪来自 Docker 容器的带宽。

通常我使用--uid-owner作为标记来跟踪给定用户的带宽使用情况。但是,即使我以 docker 容器内的用户身份运行所有进程--uid-owner也无法正常工作。--uid-owner我没有使用,而是尝试只跟踪来自 docker 创建的虚拟以太网设备的所有数据包。

然而,这最终也无济于事:无论我尝试什么,都没有捕获到数据包。

出于绝望,我尝试将规则放在所有链条中,但都没有结果。

Chain PREROUTING (policy ACCEPT 3041 packets, 7849454 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  veth5a36 any     anywhere             anywhere             MARK set 0x1

Chain INPUT (policy ACCEPT 273 packets, 23305 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  veth5a36 any     anywhere             anywhere             MARK set 0x1

Chain FORWARD …
Run Code Online (Sandbox Code Playgroud)

bandwidth iptables docker

13
推荐指数
1
解决办法
3425
查看次数

是否可以使用 Docker 为用户分离网站?

我管理服务器,用户在其中拥有自己的网站,可以通过 FTP(如托管公司)访问,而不是致力于隔离 LAMP 堆栈进程,我想知道是否可以实现 Docker 并使用每个网站的图像。

据我了解,您可以通过其端口公开 Docker 实例,因此如果您在同一台服务器上运行两个 Docker 实例,则必须公开两个不同的端口。

但是是否可以不导出端口,而是导出服务器名称,例如:

  • www.somewebsite.com : Docker 实例 1
  • www.otherwebsite.com : Docker 实例 2
  • www.etc.com : Docker 实例...

而且,在同一台服务器中。

我想在服务器上只安装 Apache,这会根据服务器名称将请求重定向到专用的 Docker 实例,但随后我必须在任何 Docker 实例上安装 Apache(再次!)和 MySQL。

这是可能的,而且,这在性能方面是否有趣(或根本没有)?

感谢您的帮助。

hosting docker

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

OS docker 容器:那么与 VM 有什么区别?

在 docker 容器中使用操作系统有什么意义?

在 docker 存储库中,您会找到一个 Ubuntu docker 镜像:https : //registry.hub.docker.com/_/ubuntu/ 我认为 Docker 更像是在“应用程序”级别。

那么 Ubuntu docker 容器和 Ubuntu 虚拟机之间有什么区别?如果你在一个 docker 容器中有一个完整的操作系统,那么使用 Docker 不是没有意义吗?

谢谢

docker

12
推荐指数
1
解决办法
3686
查看次数

带有较旧 Docker 主机的较新 docker 客户端

我们有一个在 RHEL 6.6 上运行的稍旧的 Docker 服务器。现在我们的运营团队没有很好地支持它,所以我们不能轻易升级。现在它从 EPEL 存储库运行 Docker 1.3.2。如果我通过 ssh 来完成概念验证所需的一切,这将有望帮助我推动管理以改进对 Docker 的基础设施支持。

我将它设置为侦听 TCP/TLS,并且我能够连接到它,但它拒绝运行我的本地 docker 客户端给出的命令。

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.4
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Error response from daemon: client and server don't have same version (client : 1.16, server: 1.15)
Run Code Online (Sandbox Code Playgroud)

我知道连接本身有效,因为fig有效:

$ cat > fig.yml
test:
    image: busybox
$ fig run --rm test sh
/ # hostname -f
084f75fb59d4
Run Code Online (Sandbox Code Playgroud)

有什么方法可以告诉较新的 docker 客户端使用较旧的 …

docker

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

Nginx 使用“service nginx start”挂起

我已经为我的生产服务器编译了带有自定义路径的 nginx,当我尝试使用以下命令启动/重新启动服务时:

service nginx start
Run Code Online (Sandbox Code Playgroud)

或者

service nginx restart
Run Code Online (Sandbox Code Playgroud)

它进入一个新行而不返回shell: 运行命令时的终端图片

所以问题是我无法使用service命令控制nginx 。该服务实际上在运行,但它不会向我返回一个 shell,所以我总是必须按ctrl+c才能将其取回。

我还必须提到 nginx 在通过自己的nginx命令调用它时运行得很好,并且使用nginx -s stop/reload.

这个问题在使用systemctl start nginx中仍然存在,但systemctl stop nginx工作得很好。

信息:

$ lsb_release -a
    Distributor ID: Ubuntu
    Description:    Ubuntu 15.10
    Release:    15.10
    Codename:   wily

$ uname -r
    4.2.0-27-generic

$ nginx -V
    nginx version: nginx/1.9.11
    built by gcc 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu2) 
    built with OpenSSL 1.0.2d 9 Jul 2015
    TLS SNI support enabled
    configure …
Run Code Online (Sandbox Code Playgroud)

ubuntu nginx service systemctl docker

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

Docker 上的 Jenkins - 免费交换空间 0

我注意到我在 Jenkins 上的主节点显示

free swap space: 0 B
Run Code Online (Sandbox Code Playgroud)

所以我增加了一个交换文件所描述这里

但这没有效果。我究竟做错了什么?

linux jenkins docker

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

Docker 下的 Chrome:CAP_SYS_ADMIN 与特权?

我在我的测试环境中在 Docker 中运行 chromedriver + chrome。

一切正常,直到最新的 CoreOS 升级。

这些是似乎有效的版本:

VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937
Run Code Online (Sandbox Code Playgroud)

这是导致 chrome 进行核心转储的较新版本:

VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450
Run Code Online (Sandbox Code Playgroud)

查看更改,似乎 docker 从 1.11.x 升级到 1.12.x,这中断了setns()容器内的调用。setns()Chrome 使用它来创建命名空间。

这是示例输出:

jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae
Run Code Online (Sandbox Code Playgroud)

从这个盒子上的一个容器里面:

[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:
Run Code Online (Sandbox Code Playgroud)

这是新版本打破它的方式:

jsosic-coreos-test-2017-01-04 ~ # docker --version
Docker version 1.12.3, build 34a2ead

[root@13ab34c36c82 /]# /opt/google/chrome/chrome
Failed to move to new namespace: PID namespaces supported,
  Network namespace supported,
  but failed: errno = …
Run Code Online (Sandbox Code Playgroud)

permissions namespaces chrome docker

12
推荐指数
1
解决办法
7140
查看次数

AWS ElasticBeanstalk docker-thin-pool 已满并导致文件系统重新挂载为只读?

我无法弄清楚 AWS 如何在 ElasticBeanstalk 上设置他们的 Docker“瘦池”以及它是如何被填满的。我的 docker 精简池不知何故填满并导致我的应用程序在尝试写入磁盘时崩溃。

这是来自容器内部:

>df -h
>     /dev/xvda1                  25G  1.4G   24G   6%
Run Code Online (Sandbox Code Playgroud)

事实上,EBS 有一个 25GB 的磁盘分配给它;du -sh /返回的是 1.6 GB 。

在 EC2 之外,它开始时足够无害......(通过lvs

LV          VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
docker-pool docker twi-aot--- 11.86g             37.50  14.65
Run Code Online (Sandbox Code Playgroud)

但是,文件系统很快将重新挂载为只读。通过 dmesg:

[2077620.433382] Buffer I/O error on device dm-4, logical block 2501385
[2077620.437372] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error -28 writing to inode 4988708 (offset 0 size 8388608 …
Run Code Online (Sandbox Code Playgroud)

filesystems lvs amazon-web-services docker

12
推荐指数
2
解决办法
4289
查看次数

UDP 流量未从 Docker 容器转发 -> Docker 主机

我有一个 docker 容器,但我无法从容器内部运行 DNS 查找,尽管它在 docker 主机上运行良好。

已知构建 Docker 主机的配置管理代码可在市场上的标准 RHEL 7 映像上运行,因此已知问题出在 SOE RHEL 7 映像内部。

RHEL 7.2 / Docker 版本 1.12.6,构建 88a4867/1.12.6。容器是 RHEL 7.3。SELinux 处于启用/许可模式。Docker 主机是一个 Amazon EC2 实例。

一些配置:

# /etc/sysconfig/docker
OPTIONS='--dns=10.0.0.10 --dns=10.0.0.11 --dns-search=example.com'
DOCKER_CERT_PATH=/etc/docker
ADD_REGISTRY='--add-registry registry.example.com'
no_proxy=169.254.169.254,localhost,127.0.0.1,registory.example.com
http_proxy=http://proxy.example.com:8080
https_proxy=http://proxy.example.com:8080
ftp_proxy=http://proxy.example.com:8080
Run Code Online (Sandbox Code Playgroud)

容器和主机中的解析器配置是一样的:

# /etc/resolv.conf
search example.com
nameserver 10.0.0.10
nameserver 10.0.0.11
Run Code Online (Sandbox Code Playgroud)

如果我重新启动 docker 守护进程,--debug我会看到以下内容journalctl -u docker.service

Aug 08 11:44:23 myhost.example.com dockerd-current[17341]: time="2017-08-08T11:44:23.430769581+10:00" level=debug msg="Name To resolve: http://proxy.example.com."
Aug 08 11:44:23 myhost.example.com dockerd-current[17341]: time="2017-08-08T11:44:23.431488213+10:00" level=debug …
Run Code Online (Sandbox Code Playgroud)

kernel-modules bridge linux-networking docker

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

在 alpine:3.9 上安装 openjdk 11

我正在尝试使用 openjdk 11 构建一个 alpine docker 映像。为此,我正在启动一个 alpine 容器:

docker run -it alpine:3.9 /bin/sh
Run Code Online (Sandbox Code Playgroud)

并运行以下命令:

export JAVA_HOME=/opt/openjdk-11
export PATH=$JAVA_HOME/bin:$PATH

export JAVA_VERSION=11.0.2
export JAVA_URL=https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
export JAVA_SHA256=99be79935354f5c0df1ad293620ea36d13f48ec3ea870c838f20c504c9668b57

set -eux; \
    \
    wget -O /openjdk.tgz "$JAVA_URL"; \
    echo "$JAVA_SHA256 */openjdk.tgz" | sha256sum -c -; \
    mkdir -p "$JAVA_HOME"; \
    tar --extract --file /openjdk.tgz --directory "$JAVA_HOME" --strip-components 1; \
    rm /openjdk.tgz;
Run Code Online (Sandbox Code Playgroud)

在那之后,我可以确认一些事情似乎是正确的:

/ # ls -lah $JAVA_HOME/bin/java
+ ls -lah /opt/openjdk-11/bin/java
-rwxr-xr-x    1 668      668         8.5K Jan 18 05:20 /opt/openjdk-11/bin/java
/ # echo $PATH …
Run Code Online (Sandbox Code Playgroud)

java docker alpine

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