我试图弄清楚如何跟踪来自 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) 我管理服务器,用户在其中拥有自己的网站,可以通过 FTP(如托管公司)访问,而不是致力于隔离 LAMP 堆栈进程,我想知道是否可以实现 Docker 并使用每个网站的图像。
据我了解,您可以通过其端口公开 Docker 实例,因此如果您在同一台服务器上运行两个 Docker 实例,则必须公开两个不同的端口。
但是是否可以不导出端口,而是导出服务器名称,例如:
而且,在同一台服务器中。
我想在服务器上只安装 Apache,这会根据服务器名称将请求重定向到专用的 Docker 实例,但随后我必须在任何 Docker 实例上安装 Apache(再次!)和 MySQL。
这是可能的,而且,这在性能方面是否有趣(或根本没有)?
感谢您的帮助。
在 docker 容器中使用操作系统有什么意义?
在 docker 存储库中,您会找到一个 Ubuntu docker 镜像:https : //registry.hub.docker.com/_/ubuntu/ 我认为 Docker 更像是在“应用程序”级别。
那么 Ubuntu docker 容器和 Ubuntu 虚拟机之间有什么区别?如果你在一个 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 客户端使用较旧的 …
我已经为我的生产服务器编译了带有自定义路径的 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) 我注意到我在 Jenkins 上的主节点显示
free swap space: 0 B
Run Code Online (Sandbox Code Playgroud)
所以我增加了一个交换文件所描述这里。
但这没有效果。我究竟做错了什么?
我在我的测试环境中在 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) 我无法弄清楚 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) 我有一个 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) 我正在尝试使用 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)