我在主机上运行了一对 docker 容器,这些容器一起使我的应用程序得以实现。因此,对于我的应用程序的每次迭代/实例,都需要运行一对 docker 容器。到目前为止,我在运行第二个容器时使用 --link 参数来链接第一个容器,并从主机文件中获取第一个容器的 IP 以便以编程方式使用它。
现在,我需要为第二个 docker 容器设置透明代理。这样,第二个容器的所有 http(端口 80)流量都应该通过第一个容器的端口 8080。
第一个容器 IP:172.17.0.4 (在端口8080上运行代理服务)。第二个容器IP:172.17.0.6(有浏览器等客户端工具)。我想将172.17.0.6的所有 http 流量(端口80)转发到172.17.0.4的端口8080。
即)流量到 172.17.0.4 的 80 <---> 172.17.0.6 的 8080
我尝试在第二个容器中添加 iptables 规则以进行上述配置。但它们都不起作用。
~# sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 172.17.0.4:8080
Run Code Online (Sandbox Code Playgroud)
不起作用。
~# sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 172.17.0.4:8080
Run Code Online (Sandbox Code Playgroud)
不起作用。
~# sudo …Run Code Online (Sandbox Code Playgroud) 有没有办法像 docker 那样在 lxd 容器中进行端口转发?
我听到一些传言说没有简单的方法。
根据 lxd 的主页,这是他们的目标:
直观(简单、清晰的 API 和清晰的命令行体验)
对我来说,端口转发是一个重要的部分。
我不着急。如果计划在未来发布,这将是一个有效的答案。
目前我正在使用 Docker 托管多个容器,并意识到有些容器似乎不断自行重新启动。
使用命令 docker ps -a 时,我看到列状态总是像“上升 5 分钟”或“上升 2 小时”,而在实际网站中,我看到容器自行重新启动时的停机时间,并且正在发生这种情况像每天多次。
我已经尝试使用 docker 日志并查找有关重新启动行为的文档,但到目前为止还没有找到原因。任何人都可以与我分享一些有关什么会触发 docker 容器重新启动的信息吗?当主机耗尽 RAM 时,它们会重新启动吗?有什么工具可以跟踪这种行为吗?
谢谢你的帮助..
我在任何地方都找不到明确的答案(很多相互矛盾的信息,而且非常笼统)。使用新版本的 MS Windows Server 2016,可以在两种模式下运行容器:
第一个(windows 容器)是一个经典的容器,它共享相同的 MS Windows Server 内核并且不是很安全。但是第二个(hyper-v 容器)使用管理程序来提供隔离和安全性。
几个月前 Windows 10 周年更新的正版发行版 Microsoft 已包含“适用于 Linux 的 Windows 子系统”。
是否可以使用 Hyper-V 容器技术运行 Linux(Ubuntu、Debian、CoreOS 等?)容器?
我到处搜索,但找不到适用于 Hyper-V 容器的 Linux 容器映像。我能找到的只有两个可用的是 Microsoft 提供的 Nano Server 和 Windows Server 2016。
现在使用 Windows Server 2016 的技术预览版 5 (TP5),一般可用性 (GA) 将在几天前在 Ignite 会议上宣布的任何一天发布。
有人有消息吗?能验证吗?
我需要针对多个正在运行的容器运行一个命令。例如,假设我的应用程序需要在收到代码更新后针对数据库运行数据结构更新。为此,我们要运行docker build <project_dir> -t latest,然后docker stop; docker rm; docker run。在这个阶段,我们可以假设我们已经更新了容器的核心代码,但我们仍然需要使用应用程序自己的工具运行该数据库更新。
本质上,我需要某种方法来获取正在运行的容器列表,按某些条件进行过滤,然后将这些容器 ID 注册到 Ansible。然后对于每个容器,我们运行命令。
像这样:
- name: Get list of running containers
docker:
image: my-image:latest
state: running
register: container_ids
Run Code Online (Sandbox Code Playgroud)
此任务将存储使用my-image:latestto的正在运行的容器列表container_ids。然后我们执行命令:
- name: Exec the database update
cmd: "docker exec -it {{ item }} my-app-db-update.sh"
with: container_ids
Run Code Online (Sandbox Code Playgroud)
由于我们真的不想将活动容器用于此类操作,因此更好的选择是启动一个新的一次性容器来处理相同的数据:
- name: Run the database update
cmd: "docker run --rm --volumes-from {{ item }} --link:mydb:db my-app sh -c 'my-app-db-update.sh'"
with: container_ids
Run Code Online (Sandbox Code Playgroud)
以上只是伪代码——它实际上不会运行。如何完成存储满足特定条件的正在运行的 docker 容器列表的任务,以便我可以使用docker …
我们有一个运行 MariaDB 的容器,以及主机上的一些其他小型容器。Mysql 容器被分配了 21G 内存(总共 32G),以及一些其他参数,在 docker-compose 中使用以下命令:
db:
command:
- --innodb_buffer_pool_size=4294967296
- --query_cache_size=268435456
- --tmp_table_size=1073741824
- --max_heap_table_size=1073741824
- --table_open_cache=20000
- --max_connections=1000
- --performance_schema
mem_limit: 21g
Run Code Online (Sandbox Code Playgroud)
我们遇到的问题是,mysql 容器在某些例行备份操作(即命令)期间内存不足mysqldump,并且容器崩溃。
基本上,在大约一周的使用过程中,容器的内存使用量逐渐上升到 21G,我认为如果我们不启动任何“大”操作,就可以保持这个状态,但如果mysqldump启动命令,则在转储期间的某个时刻,它超过了分配的限制,并且崩溃了(当我们在本周早些时候没有达到约 95% 的内存使用量时,它就不会崩溃)。
我不明白为什么 MySQL 不能更好地管理其内存并释放其中一些内存来启动它需要执行的新命令?
我们尝试将mysqldump命令放在不同的容器中,试图“隔离”这个大操作,但这似乎没有改变任何东西,大部分工作仍然由 Mysql 容器完成,当其他容器执行时,它最终会崩溃倾倒。
我们应该研究什么?我们的设置是否完全不正常?我们在运行 mysqltuner.pl 后设置它们,如果您认为这就是问题所在,我可以重新运行。
我们有大约 700 个数据库,每个数据库大约有 40 个表,平均大约有 10 个并发 mysql 连接,峰值为 30 或 50 个。数据库运行大小在 10Mb 到 200Mb 之间。
任何帮助表示赞赏,谢谢!
我需要在 podman 容器内设置一个 ssh 服务器(实际上是一个 git 存储库)。
主机系统sshd已经在端口 上运行22。我正在pod使用以下命令创建一个:
# podman pod create --name=gitlab --share net -p 22:22 -p 443:443 -p 80:80
# podman create --name=gitlab_gitlab_1 [...]
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,出现以下预期错误:
# podman create --name=gitlab_gitlab_1
ERRO[0000] "cannot listen on the TCP port: listen tcp4 :22: bind: address already in use"
Run Code Online (Sandbox Code Playgroud)
这是预期的,因为该22端口实际上正在使用中。
因此,我向主机系统添加了一个辅助 IP 地址,其唯一目的是将其绑定到容器(pod?)。
主机 sshd 未侦听辅助 IP。
如何“告诉”podman 使用辅助 IP 地址将端口转发到此(或全部)pod。
我正在安装 Ubuntu 20.04 的全新服务器,
我通过运行启动了一个示例 nginx,docker run --rm -p 80:80 nginx
端口 80 似乎在机器上打开,curl但我无法打开 nginx 默认页面:
$ nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2020-11-15 13:06 GMT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000077s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 …Run Code Online (Sandbox Code Playgroud) 我想知道安全专家如何考虑使容器流量安全。我们以一个简单的 K8S 集群为例。
我想我们都同意在每个容器中运行 HTTPS 而不是 HTTP 更安全。我通常会在 Ingress 上配置 TLS,然后路由到内部容器也会配置 TLS。
现代 mashing 解决方案通常安装代理 sidecar - 让我们以 Linkerd2 为例。Ingress 会将所有传入流量升级到 TLS,然后使用 Linkerd 的 TLS 将流量转发到 sidecar 代理。传输到这里的所有内容都是 TLS 并且是安全的。我想知道,既然安全的流量“已经到达”了 pod,容器是否也应该使用 TLS,或者它是否足够安全以在没有 TLS 的情况下与 sidecar 通信?我想听听容器与其边车之间的安全方面。Sidecar 是否应该被视为一个独立的容器,因此与容器的通信也应该受到 TLS 保护?
我在容器中运行 Windows Nanoserver。nanoserver 仅包含命令提示符,缺少 powershell。
我想在命令提示符下的容器内执行某些需要提升权限的命令。我目前正在使用以下命令启动容器的命令提示符。
docker exec -it <container_id> cmd
还有其他方法可以在管理模式下运行命令提示符吗?
windows windows-command-prompt containers docker windows-server-2019