我的主要目标是在公开端口并在docker swarm中进行堆栈部署时使Nginx服务仅在一台机器上可用(通常,我们可以从docker swarm集群中的任何机器上访问公开的服务)。为此,我看到了 mode: host选择。
但是当我在docker compose文件中使用它并进行堆栈部署时,我得到了错误service nginx: Unknown mode: host。
nginx.yml文件
version: "3.4"
services:
nginx:
image: ramidavalapati/nginx:tag1
deploy:
mode: host
restart_policy:
condition: on-failure
placement:
constraints: [node.hostname == ram-ThinkPad-E470]
ports:
- 80:80
- 443:443
volumes:
- /home/ram/nginxDocker/nginx.conf:/etc/nginx/nginx.conf
- /home/ram/nginxDocker/logs/access.log:/var/log/nginx/access.log
- /home/ram/nginxDocker/logs/error.log:/var/log/nginx/error.log
networks:
- all
command: ["nginx", '-g', 'daemon off;']
networks:
all:
external: true
Run Code Online (Sandbox Code Playgroud)
部署:
$ sudo docker stack deploy -c nginx.yml nginx
我的主要目标是在公开端口并进行堆栈部署时使Nginx服务仅在一台机器上可用(通常,我们可以从docker swarm集群中的任何机器上访问公开的服务)
我了解的是 publish and expose ports to only one node and access it only from that node.
当发布并公开服务(在您的情况下为Nginx)的端口时,默认情况下,您可以从docker swarm组成部分的任何节点上访问该服务。
但是,如果你希望你的服务应该只从一个节点,那么你可以用你的端口部分为从
ports:
- target: 80
published: 80
protocol: tcp
mode: host
- target: 443
published: 443
protocol: tcp
mode: host
Run Code Online (Sandbox Code Playgroud)
mode: host在端口部分使用
这使您的服务仅应在运行其容器的计算机上可用。
现在,如果您希望服务容器仅在特定计算机上运行,则可以使用@Miguel AC提到的约束。
| 归档时间: |
|
| 查看次数: |
1660 次 |
| 最近记录: |