未知模式:Docker堆栈中的主机部署

Ram*_*ati 3 docker-swarm

我的主要目标是在公开端口并在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

pra*_*nna 5

我的主要目标是在公开端口并进行堆栈部署时使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提到的约束。