docker ファイルで使用してexpose
ポートを開きます。
しかし、それでもまだ問題は発生します。ports
この場合も、@BMitch の回答が必要な解決策となります。
今のところ、最初の問題は解決しました。ありがとうございます。
最新のアップデート。
マネージャーにログインして、サービス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 と visualizer にアクセスできます。
しかし、この場合でも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
2 番目の 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 で外部または接続可能なネットワークを使用する必要はありません。接続可能を使用すると、同じネットワーク上で swarm モードの外部で他のコンテナを実行でき、外部を使用すると、スタック名のプレフィックスのない予測可能なネットワーク名が提供されます。