标签: docker

将单个 docker 容器透明代理到另一个 docker 容器

我在主机上运行了一对 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)

proxy iptables transparent-proxy containers docker

5
推荐指数
1
解决办法
7634
查看次数

检查失败后 HAProxy 无法恢复

全部,

我遇到了 HAProxy 在后端服务器重新启动后无法恢复的问题。我没有使用代理进行负载平衡,而是将不同的 URL 定向到不同的服务器(Web 和 Web 服务)以避免跨域问题。代理工作正常,直到第一次检查失败,但一旦备份,HAProxy 就永远不会恢复转发到它。代理在 docker 容器 ( https://registry.hub.docker.com/u/dockerfile/haproxy/dockerfile/ ) 内运行,并且应该运行 HAProxy 1.5.3。

haproxy.cfg

global
    log         127.0.0.1 local0
    log         127.0.0.1 local1 notice
    user        haproxy
    group       haproxy

defaults
    mode        http
    log         global
    option      dontlognull
    option      httpclose
    option      httplog
    option      forwardfor
    option      persist
    option      redispatch
    option      http-server-close
    contimeout 5000
    clitimeout 50000
    srvtimeout 50000
    maxconn     60000
    retries     3
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 …
Run Code Online (Sandbox Code Playgroud)

proxy haproxy docker

5
推荐指数
1
解决办法
8496
查看次数

Kubernetes、Docker 和 vm.max_map_count

在尝试在 K8 上运行 ElasticSearch 时,我遇到了一个会杀死容器的错误:

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

幸运的是,这有很好的文档记录,我能够找出使其稳定的容器的配置设置。这个问题不是关于那个。

我的问题是,为什么在 K8 和 Docker 上会发生这种情况?我在两种情况下都使用相同的图像(官方 ES 图像),那么值不同的一些原因是什么?有没有办法可以配置 K8 或运行它的机器,以免出现这种情况?

deployment configuration-management docker kubernetes

5
推荐指数
1
解决办法
6461
查看次数

带有 apache2 和 PHP 5.6 的 Docker:安装了 mysqli 和 pdo 扩展,但未启用

所以我试图建立一个 docker 服务器来与一些与 PHP 7 不兼容的旧应用程序一起使用

FROM php:5.6-apache

RUN apt-get -y update && apt-get upgrade -y

# Install tools && libraries
RUN apt-get -y install --fix-missing apt-utils nano wget dialog \
    build-essential git curl libcurl3 libcurl3-dev zip \
    libmcrypt-dev libsqlite3-dev libsqlite3-0 mysql-client \
    zlib1g-dev libicu-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
    && rm -rf /var/lib/apt/lists/*

# Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# PHP5 Extensions
RUN docker-php-ext-install curl \
    && docker-php-ext-install tokenizer \
    && docker-php-ext-install json \
    && …
Run Code Online (Sandbox Code Playgroud)

mysql php docker

5
推荐指数
1
解决办法
4415
查看次数

Windows Server 2019 Core 安装字体

微软在 Server 2019 核心中删除了除 Arial 之外的所有字体(参见例如https://www.windowscentral.com/microsoft-releases-new-windows-server-2019-insider-and-sdk-preview-builds)。

有道理,似乎每个人都说“添加回来很容易”。但是我究竟该如何将它们添加回来呢?使用 Enable-WindowsOptionalFeature -online -FeatureName ServerCoreFonts-NonCritical-Fonts-TrueType -all失败,因为我没有 Windows 安装盘(我猜,错误是“找不到源文件”)。似乎有点过时了,我应该需要安装一个 iso 文件来安装一些字体包(并且在 Compose 文件中完全混乱)。如何解决这个问题?

作为背景,我们正在运行一个刚刚从 Server 2016 更新到 Server 2019 容器的构建服务器,结果我们有一些 PDF 创建测试,这些测试依赖于正在安装的字体......

docker windows-server-2019

5
推荐指数
1
解决办法
2091
查看次数

Azure Web 应用程序 (Linux):“错误:容器未响应端口:8080 上的 HTTP ping” - 使用时:“start”:“pm2 start server.js”

如果我的节点应用程序使用启动脚本,我的应用服务 Linux 实例会崩溃"start": "pm2 start server.js":

2019-04-15 11:36:34.432 ERROR - Container crime-digest__6ea5_0 for site crime-digest__6ea5 has exited, failing site start
2019-04-15 11:36:34.489 ERROR - Container crime-digest__6ea5_0 didn't respond to HTTP pings on port: 8080, failing site start. See container logs for debugging.
Run Code Online (Sandbox Code Playgroud)

容器日志只有上述错误。如果我只使用:"start": "node server.js",应用程序启动得很好。

我知道如果容器没有通过 8080 响应,则容器会停止,但我已将其process.env.PORT设置为服务器的端口,因此我无法弄清楚为什么 pm2 启动脚本会使容器崩溃。

process.env.PORT如果使用上面的启动脚本,我有一种不确定的感觉,因为在过程中有些混淆,但找不到任何调试它的方法,因为在容器崩溃后,我无法再通过 ssh 进入它来检查它。

我真的很感激任何建议,谢谢。

azure node.js docker azure-app-services azure-devops

5
推荐指数
1
解决办法
5306
查看次数

Docker Swarm 管理器之间的高网络 I/O

网络流量

我们使用 3 个管理节点和 16 个工作节点运行 Docker Swarm。三个管理节点中的两个节点之间的网络 I/O 非常高。为了说明这一点,iftop以下是三个管理器节点的输出:

vm71 (10.0.0.131)

vm71                 => 10.0.0.130            39.3Mb  47.5Mb  49.3Mb
                     <=                        802Kb  1.03Mb  1.07Mb
Run Code Online (Sandbox Code Playgroud)

vm70 (10.0.0.130)

vm70                 => 10.0.0.131             798Kb  1.00Mb  1.00Mb
                     <=                       40.9Mb  44.8Mb  44.8Mb
Run Code Online (Sandbox Code Playgroud)

vm75 (10.0.0.135)

vm75                 => 10.0.0.131            9.50Kb  10.1Kb  9.51Kb
                     <=                       7.83Kb  8.08Kb  7.56Kb
Run Code Online (Sandbox Code Playgroud)

如上所示,vm70 和 vm71 之间的流量大约是 vm75 和其他两个管理器之间的流量的 4,000 倍。我们将规则设置为在任何 swarm 管理器上不运行容器。这通过docker stats在每个人身上运行得到证实。

按流程联网

下一个明显的问题是哪些进程正在生成这个网络 I/O。的输出netstat -tup如下。我只显示与iftop.

tcp6       0     46 vm71:2377               10.0.0.130:39316        ESTABLISHED 791/dockerd
Run Code Online (Sandbox Code Playgroud)

请注意,这是 tcp6 流量。

我们被难住了。为什么我们会看到这些管理节点之间的流量如此之大?如果我们降级然后提升管理器节点,流量会清理一段时间。但是,它最终会再次增加。这可能是什么原因造成的?

networking docker docker-swarm

5
推荐指数
1
解决办法
116
查看次数

“docker-compose up”作为 root 用户还是非 root 用户?

在阅读了一些文章后,我仍然不确定应该使用哪个用户来运行 docker 容器。以 root 用户身份运行 docker 容器时是否存在任何安全问题?以 root 用户身份运行 docker 容器是否可以,或者我应该使用我的普通用户,将他添加到“docker”组然后运行我的容器还是我应该创建一个仅用于管理/创建 docker 容器的附加用户?

root@myDockerHost:/opt/myDockerContainer# docker-compose up -d

VS

chris@myDockerHost:/opt/myDockerContainer# docker-compose up -d

VS

dockerusr@myDockerHost:/opt/myDockerContainer# docker-compose up -d

(我说的是我的 docker 主机上的用户 - 而不是容器内的用户!)

security linux docker docker-compose

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

如何使用 docker 容器安装 Elasticsearch 插件?

我是 Docker 的新手,我想在我的 elasticsearch 容器中安装插件,在这种情况下它们是:

  • 分析-icu
  • 分析-语音

我知道以传统方式它会是这样的:

  • /usr/share/elasticsearch 在这个目录下

sudo bin/elasticsearch-plugin install analysis-icu

sudo bin/elasticsearch-plugin install analysis-phonetic

? docker ps   
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
f7aaead8fd09        elasticsearch:7.0.1   "/usr/local/bin/dock…"   2 days ago          Up 10 minutes       0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch
Run Code Online (Sandbox Code Playgroud)

有什么想法或建议吗?

elasticsearch docker

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

如何在 docker 容器中修改 php.ini 中的最大内存限制

在 MAC 上的 docker 容器中,我收到一个 php 内存错误:

Fatal error:  Allowed memory size of 404750336 bytes exhausted (tried to allocate 266342400 bytes
Run Code Online (Sandbox Code Playgroud)

如何找到 php.ini 文件所在的位置,或者如何在 docker 中修改此参数?

mac docker

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