存取node內docker-swarm的簡單方法

存取node內docker-swarm的簡單方法

expose在docker文件中使用並打開連接埠。

然而問題仍然出現,@BMitch 的答案ports也是這種情況下必要的解決方案。

現在,我的第一個問題已經解決了。非常感謝。


最新更新。

我登入管理員並檢查服務docker service ls和容器docker container ls

然後發現

服務口岸開放,貨櫃口岸未開放。

手動運行容器時,您可以設定類似-p 8000:8000.

然而在這種情況下,容器是由堆疊配置 yml 啟動的, ports適用於服務但不適用於容器。

那麼,如何開通貨櫃港呢?

docker service ls

t402qi5kqifz        django_python           global              1/1                 registry:5000/myapp/djangosrc:latest   *:8000->8000/tcp
yadtkm6nhwdc        phpmyadmin_phpmyadmin   global              1/1                 phpmyadmin/phpmyadmin:latest             *:8009->80/tcp
3mvzc1rjc8pg        visualizer_app          global              1/1                 dockersamples/visualizer:latest          *:9009->8080/tcp

docker container ls

CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS                 PORTS               NAMES
1d2b50730959        registry:5000/myapp/djangosrc:latest   "uwsgi --socket :800…"   2 minutes ago       Up 2 minutes                               django_python.ne4qcvhmmtchn3popj26plcmz.20txv4hixixgsvwzw23jmhqln
fd5d42cd5fd6        dockersamples/visualizer:latest          "npm start"              2 hours ago         Up 2 hours (healthy)   8080/tcp            visualizer_app.ne4qcvhmmtchn3popj26plcmz.o60n8gzbxod6p6rmznvpls4z6
fd28f1efd77d        phpmyadmin/phpmyadmin:latest             "/docker-entrypoint.…"   2 hours ago         Up 2 hours             80/tcp              phpmyadmin_phpmyadmin.ne4qcvhmmtchn3popj26plcmz.v1flhjuez68lmhb9erlsoz8wc

我在 docker-swarm 中有一些服務。

如果我將服務設為全局,則可以簡單地存取它

localhost:8000

但是我想從外部存取每個節點中的服務。

我需要這個案例的基本練習。

我所做的就是下面這樣

1)我製作了覆蓋網絡

docker container exec -it man docker network create --driver=overlay --attachable djangonet

2)開啟管理節點埠8000:8000

version: "3"
services:
  registry:
    container_name: reg
    image: registry:2.6
    ports:
      - 5000:5000
    volumes:
      - "./registry-data:/var/lib/registry"
  manager:
    container_name: man
    image: docker:18.05.0-ce-dind
    privileged: true
    ports:
      - 8000:8000 ## here
      - 8082:8082
      - 9009:9009
    depends_on:
      - registry
    expose:
      - 3375
    command: "--insecure-registry registry:5000"
    volumes:
      - "./stack:/stack"
  node01:
    container_name: node01
    image: docker:18.05.0-ce-dind
    privileged: true
    tty: true
    depends_on:
      - manager
      - registry
    expose:
      - 7946
      - 7946/udp
      - 4789/udp
    command: "--insecure-registry registry:5000"
  node02:
    container_name: node02
    image: docker:18.05.0-ce-dind
    privileged: true
    tty: true
    depends_on:
      - manager
      - registry
    expose:
      - 7946
      - 7946/udp
      - 4789/udp
    command: "--insecure-registry registry:5000"

3)service_port在服務中設定8000並設定外部網路。

services:
  python:
    image: registry:5000/myapp/djangosrc:latest
    environment:
      SERVICE_PORTS: 8000
    networks:
      - djangonet
    deploy:
      replicas: 1
      placement:
        constraints: [node.role != manager]
networks:
  djangonet:
    external: true

然而仍然不行。

我應該在哪裡設置更多?


我正在嘗試一些員工,但徒勞無功。所以我為了測試目的改變了方式。

以最簡單的方式將我的服務作為全局的經理。

以同樣的方式我可以存取 phpmyadmin 和視覺化工具。

但即使在這種情況下我也無法存取 localhost:8000

我擔心 myapp/djangosrc 中的連接埠被某些東西阻塞了?

有可能發生嗎?

w7g3h9poppb4        django_python           global              1/1                 registry:5000/myapp/djangosrc:latest   *:8000->8000/tcp
yadtkm6nhwdc        phpmyadmin_phpmyadmin   global              1/1                 phpmyadmin/phpmyadmin:latest             *:8009->80/tcp
3mvzc1rjc8pg        visualizer_app          global              1/1                 dockersamples/visualizer:latest          *:9009->8080/tcp



version: '3'
services:
  python:
    image: registry:5000/myapp/djangosrc:latest
    #command: uwsgi --socket :8001 --module myapp.wsgi --py-autoreload 1 --logto /tmp/mylog.log

    ports:
      - 8000:8000
    deploy:
      mode: global
      placement:
        constraints: [node.role == manager]

答案1

man我假設您使用部署了容器內的第二個 compose 文件docker stack deploy,並且該文件具有版本 3 或更高版本。

要從外部存取 docker 內部運行的任何應用程式的端口,您需要發布該端口:

version: '3'
services:
  python:
    image: registry:5000/myapp/djangosrc:latest
    environment:
      SERVICE_PORTS: 8000
    # include the below ports section to publish a port
    ports:
      - 8000:8000
    networks:
      - djangonet
    deploy:
      replicas: 1
      placement:
        constraints: [node.role != manager]
networks:
  djangonet:
    external: true

請注意,無需使用外部或可連接網路與 swarm 來存取連接埠。 Attachable 允許您在同一網路上執行 Swarm 模式以外的其他容器,而 external 提供了一個可預測的網路名稱,不帶堆疊名稱前綴。

相關內容