标签: docker-compose

两个堆栈的两个docker容器之间的连接

我正在构建两个共享一些通用数据的项目。这两个项目的服务是由两个 docker-compose YML 文件构建的。我想从一个堆栈中运行的Python脚本访问另一个堆栈中指定的MySQL服务器。

我是通过连接到内部 docker IP 来实现的。但是我发现服务器重启后IP就变了。我尝试通过容器名称进行连接,或在 docker-compose YML 文件中“链接”容器名称。两者都不起作用。我认为在两个堆栈之间共享一个 docker 网络接口应该可以解决问题。

我可以知道如何在两个 docker-compose YML 文件中指定“网络”吗?

或者,有没有更好的方法来实现这一目标?

谢谢。

docker docker-compose

9
推荐指数
1
解决办法
5849
查看次数

如何将 Docker 容器日志转发到 ELK?

我想知道将我的 docker 容器日志转发到 ELK 服务器的最简单方法是什么,到目前为止,我在搜索互联网后尝试的解决方案根本不起作用。

基本上,我有一个使用 docker-compose 运行的 docker 映像,该容器不会在本地记录任何内容(它由不同的服务组成,但没有一个是 logstash 或其他任何服务),但我看到通过docker logs -tf imageNamedocker-compose logs. 由于我使用 compose 启动容器,因此我无法使用(或至少我不知道如何使用)--logs-driverdocker 选项。

因此,我想知道是否有人可以启发我,例如如何将该日志转发到 ELK 容器。

提前致谢,

问候

解决方案

感谢 madeddie,我可以通过以下方式解决我的问题,提到我使用了 madeddie 在他的帖子中建议的基本 ELK-stack-in-containers。

首先,我更新了docker-compose.yml我的容器文件,以按照 madeddie 告诉我的那样为日志记录引用添加条目,我为每个服务添加了一个条目,我的 docker-compose 片段如下所示

   version: '2'
    services:
      mosquitto:
        image: ansi/mosquitto
        ports:
          - "1883:1883" # Public access to MQTT
          - "12202:12202"  #mapping logs
        logging: 
           driver: gelf
           options: 
             gelf-address: udp://localhost:12202
    redis:
     image: redis
     command: redis-server --appendonly yes
     ports:
       - "6379:6379" # …
Run Code Online (Sandbox Code Playgroud)

logging syslog docker elk docker-compose

8
推荐指数
1
解决办法
8198
查看次数

如何防止 docker 容器在 Windows 中的守护进程启动时自动启动?

我在 Windows 10 上使用 Docker 及其 docker-compose 功能。

现在,当我运行命令docker-compose up -d在后台启动一些容器时,即使在重新启动 Docker-Host 后,启动的容器也会运行。

我怎样才能防止这种情况?我只希望它们在我明确启动时启动。

windows docker windows-10 docker-compose

7
推荐指数
1
解决办法
7938
查看次数

从 Docker 容器内部向主机系统公开 Unix 套接字

我想在侦听 Unix 套接字而不是端口的 Docker 容器中运行一个 web 服务器。我在共享 Docker 套接字方面发现了很多结果,但我认为这不是我想要的。

我希望主机系统能够连接到容器内正在侦听的 Unix 套接字。

我正在使用 docker-compose,所以通常的使用方式-v不起作用。

我的 ngix 站点配置:

server {                                                                                             
   listen 80; listen [::]:80;                                                            
    server_name foo.com www.foo.com;

    location / {                                                                         
        proxy_pass http://unix:/var/lib/docker/volumes/app_shared/_data/app.https.sock:;       
        proxy_set_header Host $http_host;                                                            
        proxy_http_version 1.1;                                                                      
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                                 
        proxy_set_header X-Forwarded-Proto https;                                                    
    } 
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '3'
services:      
  web:
    build: .
    volumes:
            - shared:/var/app
    command: "npm start"
volumes:
   shared:
Run Code Online (Sandbox Code Playgroud)

然而它说我无法连接到套接字,即使它存在于主机的这个位置。

socket docker-compose

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

有没有办法在前台运行 Postfix?

有没有办法在前台运行 Postfix?

我想在 docker 中将 Postfix 作为 PID 1 运行。我不想使用任何 bash shell、supervisorD 或任何包装器来启动它。

我只想知道是否有任何方法可以在前台启动它,以便我可以从“docker logs 'container-name'”中检查它的日志

当我手动运行“postfix start”时,它会运行然后在后台启动。有什么办法让它保持在前台?

谢谢

postfix docker docker-compose

7
推荐指数
3
解决办法
8840
查看次数

使用 iptables 规则不适用于 Docker 容器

只需设置一个 ElasticSearch 容器即可与公司的 Laravel 应用程序一起使用。创建 docker-compose.yml 并运行它是完美且直接的,但是当我想要对这个东西进行防火墙以便只能从提到的 Laravel 应用程序的一个特定 IP 访问它时,就会出现问题。

在研究过程中,我注意到很多人都遇到这些问题,即 Docker 转发的端口流量完全暴露于公众,并且他们无法正确对其进行防火墙设置。

在过去的 6 小时内我找到了几个解决方案,但没有一个有效。我认为这与 Docker 处理/转发入站流量的方式有关,而且我的 iptables 知识并不是那么广泛,因此我可以自己理解发生了什么。

这是我的 docker-compose.yml (就其价值而言):

version: '3.4'

services:

  elasticsearch:
    image: khezen/elasticsearch:6.1.1
    container_name: elasticsearch

    environment:
      NETWORK_HOST: 0.0.0.0
      HOSTS: 127.0.0.1
      CLUSTER_NAME: fd-es
      NODE_NAME: node-1
      HEAP_SIZE: 31g
      HTTP_SSL: "true"
      ELASTIC_PWD: "somepasswd"
      HTTP_CORS_ENABLE: "true"
      HTTP_CORS_ALLOW_ORIGIN: /https?:\/\/localhost(:[0-9]+)?/

    ulimits:
      memlock:
       soft: -1
       hard: -1

    volumes:
      - ./config/elasticsearch.yml:/elasticsearch/config/elasticsearch.yml
      - ./data:/elasticsearch/data
      - ./logs:/elasticsearch/logs

    ports:
      - 9200:9200

    networks:
      - es-network

    restart: always

networks:
  es-network:
    driver: bridge …
Run Code Online (Sandbox Code Playgroud)

networking iptables docker docker-compose

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

如何防止 docker-compose 将哈希附加到创建的容器名称?

我有一个带有几个 lxc 容器的服务器。在一些容器中安装了 docker。通常在这些LXC容器导致容器名称,格式为泊坞窗撰写的动作appname_service_1,如wordpress_app_1wordpress_db_1,当appdb两个服务,被称为在wordpress撰写文件-你知道它。

但是今天我创建了另一个 LXC 容器并在其中安装了 docker。由于ansible,设置与其他容器相同。但是,docker 容器名称不同,例如wordpress_db_1_c9de200f9abd. 每当我删除容器并重新创建它时,最后的哈希值都会有所不同。

由于这使得容器不像它们应该的那样一次性,因为它破坏了容器之间的任何路由,我想知道为什么要附加这些哈希。所有 LXC 容器都安装了相同的 docker 和相同的 docker-compose 版本。我想在我的 docker 容器名称中完全阻止这些哈希。

为什么它们现在发生而以前没有发生?

containers lxc docker docker-compose

7
推荐指数
2
解决办法
4202
查看次数

kubernetes 中的 WEBRTC MCU/SFU - 端口范围?

我使用janus-gateway作为用于群组视频通话的 webrtc 媒体服务器。以前我使用 docker-compose 将它部署在单个节点中,但现在我希望能够水平扩展它。为此,我正在尝试使用 kubernetes,但我面临两个问题:

1:指定要为媒体服务器公开的端口范围。由于媒体服务器需要一个端口范围才能运行,我可以在 docker-compose 中使用以下代码进行操作

janus-gateway:
 build: ./gateway
 image: janus-gateway-image
 restart: always
 ports:
   -  8088:8088
   -  8188:8188
   -  7088:7088
   -  "10000-10200:10000-10200/udp"
 networks:
  - back-tier
Run Code Online (Sandbox Code Playgroud)

但是我无法在 kubernetes 中找到任何替代方案。如何使用 kubernetes 公开端口范围。

2:如何从我的 nodejs 应用程序连接到网关的特定实例。所以假设网关的两个实例正在运行,现在当用户连接到应用程序时,我将它连接到正在运行的两个实例之一并将其保存在 redis 中,并确保来自该用户的任何请求都传递到该特定实例. 如何从节点连接到特定副本?还获取副本列表?

我已经在 kuebernetes 上检查过这个问题,但它仍然没有解决。有什么解决方法吗?

docker kubernetes docker-compose webrtc docker-swarm

7
推荐指数
1
解决办法
2378
查看次数

如何在原始网络上为 docker 容器提供自己的可路由 IP?

主要问题

想象一下这个场景。

  • 192.168.0.0/24的网络。
  • 主机名为“Docker-Host”的计算机正在 192.168.0.2 运行 docker 引擎
  • 'Docker-Host' 运行 sshd 服务器
  • 在 'Docker-Host' 上,我在使用 ssh:22 和 https:443 (GitLab) 的容器中运行应用程序

我如何为这个容器分配 192.168.0.3 的 IP?

我需要服务在他们设计的默认端口上运行。


附加信息

我不能使用反向代理作为解决方案,因为这并不能解决如何通过 SSH 与 GitLab 实例通信的问题。

在这种情况下,将端口 22 映射到主机上的不同端口是不专业的,我的客户端开发人员不会喜欢这种设置。

如果我正在启动此应用程序的许多实例,这也将很难维护。并且必须为每个容器将每个 SSH 映射到主机上的新端口。

我的客户需要能够在没有额外配置客户端的情况下解析和运行以下内容。

https://GitLab.internal.net.work

ssh git 克隆https://GitLab.internal.net.work

我已经查看了 Docker 网络文档,除非我弄错了,否则我看不到一个易于维护的解决方案(尽管我还是 Docker 的新手)。

如何才能做到这一点?在这种情况下,其他人在做什么作为“最佳实践”?(如果可能,请以 docker-compose 语法的形式给出答案)。

ssh containers docker kubernetes docker-compose

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

CryptographyDeprecationWarning:Python 核心团队不再支持 Python 2

我正在尝试运行docker-compose(通过 安装pip),但遇到以下错误:

# pip install --quiet docker-compose
# docker-compose ps
/usr/local/lib/python2.7/dist-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in a future release.
  from cryptography.hazmat.backends import default_backend
Traceback (most recent call last):
  File "/usr/local/bin/docker-compose", line 7, in <module>
    from compose.cli.main import main
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/main.py", line 24, in <module>
    from ..config import ConfigurationError
  File "/usr/local/lib/python2.7/dist-packages/compose/config/__init__.py", line 6, in <module>
    from .config …
Run Code Online (Sandbox Code Playgroud)

python pip docker-compose

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