鉴于我们客户的限制,我们不能让我们的虚拟机完全对互联网开放。但是,我们有时需要从 Docker Hub 中拉取 Docker 镜像。
我们可以将 IP 地址和范围以及端口列入白名单;但没有主机名。
我找遍了所有我能找到的地方,但没有找到任何 Docker 在运行诸如docker pull redis. 有没有人遇到过这样的问题?
我检查了这个问题:Docker 无法提取图像,但不出所料,https : //index.docker.io解析为另一个 IP。
当我通过 Cisco AnyConnect 客户端初始化 VPN 连接时,我失去了与 docker 守护进程的连接。我的猜测(由一些谷歌搜索支持)是这与 AnyConnect 重写的路由有关。
问题是 - 如何规避?在建立 VPN 连接后,我尝试启动和重新启动 docker 守护进程,但这种幼稚的尝试显然失败了。
然后我在谷歌上搜索了一堆提议的相当笨拙的解决方案,例如,这个人建议转发端口,然后总是使用docker --tlsverify=false- 我不想这样做。
我尝试做的另一件事是使用这里提到的解决方案:
docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "25.0.1.100/24" default
Run Code Online (Sandbox Code Playgroud)
这对我也不起作用。
因此,我正在寻找对其他 docker 用户也有益的规范解决方案。
我的 docker 版本是1.11.2,操作系统是OS X El Capitan (10.11.6)。
我正在尝试将 json 日志从 docker 传输到jq. 如果我使用它,它工作正常:
docker logs container_id 2>&1 | jq '.'
Run Code Online (Sandbox Code Playgroud)
但是,如果我试图追踪它,它就会卡住。
docker logs -f container_id 2>&1 | jq '.'
Run Code Online (Sandbox Code Playgroud)
虽然尾随本身确实有效:
docker logs -f container_id 2>&1
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
我最近刚接触 Docker,我对其工作原理的了解非常有限,目前我在决定采用哪种方式时受到时间的限制。
我一直在想,我可以设置一个 vagrant box,或者只是一个 Ubuntu VM,使用 Virtualbox,然后让 Docker 启动并运行。
这是为了处理 PHP7/Nginx/Laravel 应用程序
我的问题是 - 这可以正常工作吗?会不会有性能问题?我在 Ubuntu 上的经验是,让这些类型的东西(例如 Docker)比在 Windows 上工作要简单得多。
此外,我可以在预先存在的 vagrant box 中寻找什么,这将使我能够尽快使用 Docker(在 vagrant box 上运行)进行设置?
谢谢!
我正在尝试控制在 Docker 容器内由 Selenium 控制的 Chrome 上运行的 WebRTC Web 应用程序的输入。
这是 WebRTC 应用程序自动化测试的一部分。
作为测试的一部分,我需要能够检查另一端是否在应有的时候接收到音频。
基本上,我想检查如果一个客户说话,另一个客户听到它,反之亦然,除非客户处于静音状态。
现在,通过使用命令行参数启动 Chrome,我可以轻松地让 Chrome 模拟麦克风(和摄像头)输入:
--use-fake-ui-for-media-stream
--use-fake-device-for-media-stream
Run Code Online (Sandbox Code Playgroud)
这有一个问题,即默认样本中有很多静音(更难检测)。我可以通过提供我自己的音频文件更一致的音频来解决这个问题:
--use-file-for-fake-audio-capture=/opt/media/audio1.wav
Run Code Online (Sandbox Code Playgroud)
但这还有另一个问题——如果 Chrome 同时发送和接收音频,作为 Chrome 回声消除功能的一部分,接收到的音频会被严重破坏,几乎完全静音。(回声消除设置为 WebRTC 应用程序的一部分,而不是 Chrome 本身的一部分,我不想对正在测试的代码进行更改以方便测试。)
使用两个不同的示例(每个客户端一个)有一点帮助,但不是很大。
真正的问题是,只要他们正在运行,这两个客户端就会不停地“说话”,由于上述回声消除,这既会弄乱音频,也不是要测试的现实场景,因为人们通常不会不断地互相交谈。
从理论上讲,我可以使用特制的样本,其中包含有意的噪声/静音部分,但是在客户端之间对齐这些样本并与测试验证保持一致将是一场噩梦。
我真正需要的是能够根据需要开始和停止向客户端播放音频。
似乎没有任何方法可以控制 Chrome 中的假媒体流,所以我最好的选择似乎是在 Docker 容器内以某种方式创建一个假的“麦克风”音频输入设备,并控制它。
在标准 Linux 上,您可以使用 pulseaudio 将音频输出循环回作为捕获设备,这看起来很有希望,但我不知道如何在 Docker 容器中使用它。
Docker 容器甚至没有任何可以使用的音频设备。
我找到了关于如何设置 Docker 以使用主机的音频硬件的各种指南,但这并不是很有用,因为这些容器在 eSXI 服务器上运行并且没有任何声卡可以使用。
Pulseaudio 也支持虚拟设备,但那些需要驱动程序/内核模块才能工作。我可能是错的,但我认为你不能在 Docker 容器中使用它们。
对不起,如果上面有点罗嗦,但我试图解释这个问题和我已经研究过的各个方向。
那么,有没有人知道我可以使用假的捕获设备或通过其他方式控制音频输入到 Docker 容器内 Chrome 捕获设备的方法?
当我将输出通过管道传输docker exec到另一个命令时,它似乎弄乱了我的终端的行结尾。
例如:
$ docker exec -it foo sh -c 'echo {\"a\":\"b\",\"c\":\"d\"}' | jq
{
"a": "b",
"c": "d"
}
$
Run Code Online (Sandbox Code Playgroud)
但是,如果我立即在主机上的同一终端中运行相同的命令:
$ sh -c 'echo {\"a\":\"b\",\"c\":\"d\"}' | jq
{
"a": "b",
"c": "d"
}
Run Code Online (Sandbox Code Playgroud)
...正如预期的那样。
如果我通过管道输出xxd,它似乎会引入一个 CR 字符以及 LF (0d0a,而不是 0a);它还弄乱了以下的输出xxd:
$ docker exec -i -t foo sh -c 'echo {\"a\":\"b\",\"c\":\"d\"}' | xxd
00000000: 7b22 6122 3a22 6222 2c22 6322 3a22 6422 {"a":"b","c":"d"
00000010: 7d0d 0a
Run Code Online (Sandbox Code Playgroud)
如果我尝试通过发出自己的声音来排除 docker \r\n,那就没问题:
$ printf "{\"a\":\"b\",\"c\":\"d\"}\r\n" …Run Code Online (Sandbox Code Playgroud) 我使用的是 Linux Mint 19,使用的是 Cinnamon 3.8.8
我有 Nvidia GT740 和 8GB RAM
我正在使用:
Docker版本18.06.1-ce,构建e68fc7a docker-machine版本0.14.0,构建89b8332 docker-compose版本1.21.2,构建a133471
我注意到我的启动速度非常慢
所以我跑了:
systemd-analyze blame
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
1min 27.764s docker.service
39.269s plymouth-quit-wait.service
24.180s dev-sdb2.device
20.645s nmbd.service
18.437s snapd.service
13.111s systemd-journal-flush.service
12.475s udisks2.service
12.446s NetworkManager.service
10.969s keyboard-setup.service
10.734s libvirtd.service
10.418s NetworkManager-wait-online.service
10.168s networkd-dispatcher.service
10.065s smbd.service
9.736s apparmor.service
..... etc
Run Code Online (Sandbox Code Playgroud)
正如你所看到的 docker.service 花费了大量时间,有人知道我该如何解决这个问题吗?
我知道,在 Windows 或 macOS 上使用 Docker Desktop 时,在容器中使用绑定挂载会带来性能损失,并且首选卷来提高性能。但是,我找不到任何有关在 Linux 上运行 Docker 时受到任何处罚的信息。
在 Linux 上的 Docker 上使用绑定挂载时是否会产生性能损失,或者由于 Docker 在 Linux 上本机运行,因此没有性能损失?
在在 Ubuntu 上安装 Docker 引擎的Docker 文档中,有一个从存储库安装的选项(以及下载 deb 文件并安装它的选项,以及使用也使用存储库的便捷脚本)。但我发现如果我只是跑
sudo apt-get install docker.io
Run Code Online (Sandbox Code Playgroud)
在我的机器上,它将完美下载并运行 Docker。
我的问题是:从自己的存储库安装 docker 或从已配置的默认存储库安装 docker 有区别吗?
另外,在查看文档时,您应该安装 3 个软件包docker-ce docker-ce-cli,而containerd.io从默认存储库安装时,您只需安装docker.io.
这些不同的软件包是什么以及它们包含什么?
我有一个服务在端口 的主机上运行8545。我有几个需要访问主机上的此服务的 docker 容器。主机运行的是ubuntu。我已经配置成功了
extra_hosts:
- "host.docker.internal:host-gateway"
Run Code Online (Sandbox Code Playgroud)
在 docker-compose 文件中,我用它来启动我的 docker 容器。但是,我发现容器无法访问host.docker.internal:8545,除非我使用以下命令打开主机上的该端口
ufw allow 8545
Run Code Online (Sandbox Code Playgroud)
然而,这会向任何人开放该端口,这是不希望的。
如何仅向主机上运行的 docker 容器开放此端口?
编辑:我已经看到该docker0接口的 IP 为172.17.0.1. 我尝试运行sudo ufw allow from 172.17.0.1,但这并没有使我的容器能够访问8545主机上的端口。
root@localhost:~/code/metis/ops# ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
Anywhere ALLOW 172.17.0.1
22/tcp (v6) ALLOW Anywhere (v6)
root@localhost:~/code/metis/ops# docker exec -it ops_l2geth-mainnet_1 /bin/sh
/ # geth attach http://host.docker.internal:8545
Fatal: Failed to start the JavaScript …Run Code Online (Sandbox Code Playgroud) docker ×10
linux ×3
firewall ×2
apt ×1
audio ×1
boot ×1
dpkg ×1
linux-mint ×1
macos ×1
microphone ×1
networking ×1
newlines ×1
performance ×1
terminal ×1
ubuntu ×1
ufw ×1
vagrant ×1
vpn ×1
windows-10 ×1