相关疑难解决方法(0)

当我在 docker-compose.yml 文件中指定端口时,它是 TCP 还是 UDP?

我知道我可以在docker-compose.yml文件中指定“端口”的协议,但是如果没有指定协议,我不确定默认协议是什么。

是TCP吗?是UDP吗?两个都?

我无法在任何地方找到答案(包括在 Docker Compose 文件参考中)。

docker docker-compose

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

具有多个 docker-compose.yml 文件的 Traefik

特拉菲克的朋友们大家好。

我刚刚开始研究 traefik。所有教程都展示了如何使用 traefik 与其他容器一起运行一个 docker-compose.yml 文件。我经常有许多单独的 docker-compose.yml 文件,并且非常想将它们与 traefik 一起使用。

这是我的 traefik 容器代码:

version: "3.3"
services:
  traefik:
    image: "traefik:v2.5"
    container_name: "traefik"
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
      #- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.myresolver.acme.email=xxxxxxxxx@gmail.com"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - "443:443"
      - "8080:8080"
    networks:
      - "traefik"
      - "external"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
Run Code Online (Sandbox Code Playgroud)

以及我想与 traefik 一起使用的另一个示例 docker-compose:

version: '3.1'
services:
  php:
    image: php:7.4-apache
    ports:
      - 8081:80
    volumes:
      - ./php/www:/var/www/html/
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.php.rule=host(`php.xxxxxx.com`)"
      - "traefik.http.routers.php.entrypoints=websecure"
      - …
Run Code Online (Sandbox Code Playgroud)

docker-compose devops traefik

6
推荐指数
1
解决办法
2410
查看次数

如何阅读/理解 docker-compose.yml 以及“stdin_open: true tty: true”组件的作用?

参加涉及这些问题的课程;实际细节与课程无关,但我通常有兴趣尝试理解事物。

我有一个 docker-compose.yml 文件,我可以“调用”或“启动”该文件。该文件包含以下信息:

services:
  redis:
    image: redis:latest
    expose:
      - "6379"

  sample0395:
    image: sample0395/base:latest
    stdin_open: true
    tty: true
    expose:
      - "8888"
    ports:
      - "8888:8888"
Run Code Online (Sandbox Code Playgroud)

据我了解,仅基于如图所示的层次结构:

  • redis 和sample0395 是“服务”
  • redis:latest 和 sample0395/base:latest 是 image_name:tag 组合
  • 暴露和端口:列出端口(不确定有什么区别或这两者之间的区别的意义是什么)
  • 我不知道 stdin_open 或 tty 做什么,并且似乎无法通过谷歌获得理解。

yaml docker-compose

4
推荐指数
1
解决办法
4280
查看次数

Docker 中的 Kibana 和 Elasticsearch 通过标准安装共存

我正在尝试在我的服务器上设置新版本的 Kibana 和 Elasticsearch。我有一个现有的 K 和 E 使用默认端口(5601、9200)运行,并且无法升级现有数据。我想在 Docker 中运行 K 和 E 的较新版本 (7.4.2),使用不同的端口 (5611:5601、9211:9200) 来访问容器。我有新的数据区域可用。

我相信我的 Elasticsearch 运行正常,但 Kibana 查找 Elasticsearch 的覆盖对我不起作用。我已附加我的 docker-compose.yml 文件。

预先感谢您的帮助。

version: '3'

networks:
  elk01:
    driver: bridge

services:
  es01:
    image: elasticsearch:7.4.2
    container_name: es01
    user: "983"
    networks:
      - elk01
    environment:
      #- cluster.initial_master_nodes=es01
      - cluster.name=docker-cluster
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms4g -Xmx4g -XX:-HeapDumpOnOutOfMemoryError"
      #- ES_JAVA_OPTS: "-Xms4g -Xmx4g -XX:-HeapDumpOnOutOfMemoryError"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9211:9200"
      - "9311:9300"
    expose:
      - "9211"
    volumes:
      - /elk/elk7_4_2/elasticsearch/data:/usr/share/elasticsearch/data
      - …
Run Code Online (Sandbox Code Playgroud)

elasticsearch docker kibana docker-compose

3
推荐指数
1
解决办法
4733
查看次数

为什么只配置了“expose”的服务能够与互联网通信?

关于 docker 网络的一些事情让我感到困惑。我有一个docker-compose.yml可以像这样简化的文件:

version: '3.8'
services:
    foo:
        ...
        networks:
            - main_network
        ports:
            - "3000:3000"
    bar:
        ...
        networks:
            - main_network
        expose:
          - "5000"
networks:
    main_network:
Run Code Online (Sandbox Code Playgroud)

根据这个答案expose...

公开端口而不将它们发布到主机——它们只能被链接的服务访问。只能指定内部端口。

如果这是真的,bar应该只将 5000 端口公开给foo服务。它似乎按预期工作。如果,我运行bashbar服务和执行:

$ ss -lntu 
Run Code Online (Sandbox Code Playgroud)

5000端口正确打开:

Netid    State     Recv-Q  Send-Q   Local Address:Port    Peer Address:Port
...
tcp      LISTEN    0       128      0.0.0.0:5000          0.0.0.0:*
...
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,从我的容器外部,例如使用 Web 浏览器,我无法连接到该主机。另外,如果我跑

$ nmap -p1-65535 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

我可以验证foo打开了服务的 3000/TCP 端口:

PORT     STATE SERVICE
3000/tcp …
Run Code Online (Sandbox Code Playgroud)

networking docker docker-compose

3
推荐指数
1
解决办法
3510
查看次数