我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 提供了一個可預測的網路名稱,不帶堆疊名稱前綴。