标签: docker-stack

堆叠后Docker套接字崩溃

我尝试部署 docker 堆栈,其中包括我的开发环境。但在随机情况下,我有下一个错误:

> failed to create service < service_name >: Cannot connect to the
> Docker daemon at unix:///var/run/docker.sock. Is the docker daemon
> running?
Run Code Online (Sandbox Code Playgroud)

接下来我重新启动 docker 守护进程。有时它需要杀死 docker 进程和垫片。我删除旧堆栈并重新构建。有时 docker 成功完成构建,但套接字在开始阶段崩溃。

当我以常规模式启动它时,所有容器都可以正常工作,没有群或堆栈。它在 swarm 中并不完全有效。

我已经使用下一个命令来构建:

> $ docker stack deploy dev-env-stc -c docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

环境在 Antergos Linux(Arch) 中运行。

布局就像在图中 在此处输入图片说明

使用命令创建的 Nginx 容器和 docker 网络:

>$ docker run --detach --name nginx-main --net dev-env-ext --ip 10.20.20.10 --publish 80:80 --publish 443:443 --volume /env-vol/nginx/conf:/etc/nginx:ro --volume /env-vol/nginx/www:/usr/var/www --volume /env-vol/nginx/logs:/usr/var/logs --volume /env-vol/nginx/run:/usr/var/run --volume /env-vol/ssl:/usr/var/ssl:ro nginx-webserver …
Run Code Online (Sandbox Code Playgroud)

nginx docker swarm docker-compose docker-stack

5
推荐指数
1
解决办法
495
查看次数

Docker Swarm 错误 - 类型的安装配置无效

这是我的 Docker compose/stack 文件。当我在单个节点上部署时,一切正常,但当我在多个节点上部署时,出现以下错误:

绑定类型的挂载配置无效 绑定源路径不存在

version: '3'
services:
  shinyproxy:
    build: /etc/shinyproxy
    deploy: 
      replicas: 3
    user: root:root
    hostname: shinyproxy
    image: shinyproxy-example
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 5000:5000
    networks: 
      - proxynetwork
  mysql:
    image: mysql
    deploy: 
      replicas: 3    
    volumes:
      - /mysqldata:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: keycloak
      MYSQL_USER: keycloak
      MYSQL_PASSWORD: password
    networks: 
      - proxynetwork
  keycloak:
    deploy: 
      replicas: 3  
    image: jboss/keycloak
    volumes:
      - /etc/letsencrypt/live/ds-gym.de/fullchain.pem:/etc/x509/https/tls.crt
      - /etc/letsencrypt/live/ds-gym.de/privkey.pem:/etc/x509/https/tls.key
      #- /theme/govuk-social-providers/:/opt/jboss/keycloak/themes/govuk-social-providers/
    environment:
      - PROXY_ADDRESS_FORWARDING=true
      - KEYCLOAK_USER=myadmin
      - KEYCLOAK_PASSWORD=mypassword
    ports:
      - 8443:8443
    networks: 
      - proxynetwork

networks: …
Run Code Online (Sandbox Code Playgroud)

docker-compose docker-swarm docker-stack

5
推荐指数
1
解决办法
2万
查看次数

Docker Swarm 使用主机网络更新服务

我有一个 docker swarm,目前只有一个节点和几个堆栈。为了能够获取请求我的一项服务的客户端的 IP 地址,我将一项服务上的端口切换为模式:主机。除非我想更新该服务,否则这工作正常。我没有更改部署顺序,因此它应该是默认的“停止优先”,但是当我使用任务时stack deploy,任务失败并显示以下消息:

no suitable node (host-mode port already in use on 1 node)
Run Code Online (Sandbox Code Playgroud)

当我将服务缩小到 0 然后使用stack deploy它时,它可以正常工作,但我不明白为什么直接更新时会出现问题。“stop-first”不应该意味着先终止旧服务(释放端口),然后启动新服务吗?如何在部署更改之前更改 yml 而不必缩放到 0?

这是有问题的 application.yml:

version: "3.7"

services:
  myservice:
    image: myrepo/gateway
  ports:
    - mode: host
      protocol: tc
      published: 443
      target: 443
  networks:
    - gateway_net

networks:
  gateway_net:
    external: true # was created with 'docker network create -d overlay gateway_net', is used to connect gw with other services
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-swarm docker-network docker-stack

5
推荐指数
0
解决办法
1103
查看次数

镜像版本已外部化至.env文件的Docker Swarm

我曾经将映像版本外部化为.env文件。这使维护变得容易,而且我docker-compose.yml不仅仅为了升级版本就修改文件,所以我确定我不会误删一行。

但是当我尝试将我的服务部署stack到时swarm,docker引擎抱怨我的映像不是正确的存储库/标签,并带有以下确切消息:

来自守护程序的错误响应:rpc错误:代码= 3 desc = ContainerSpec:“组/图像:”不是有效的存储库/标签

要解决此问题,我可以直接在docker-compose.yml文件中修复映像版本。这里有逻辑还是一个错误?但这混合了docker-compose和变量部分的修复部分。

干杯,奥利维尔

docker docker-swarm-mode docker-stack

4
推荐指数
4
解决办法
2719
查看次数

单个容器上的多个 docker 网络

我有一个 docker 堆栈配置,其中包含一个名为 的覆盖网络traefik。它包含我的traefik反向代理容器,然后是几个服务于各个子域的容器。我正在添加一个新容器,它需要访问我在另一个容器中创建的数据库服务器,因此我添加了如下内容:

networks:
  traefik:
    driver: overlay
  database:
    driver: overlay

services:
  traefik:
    image: traefik
    networks:
      - traefik
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    volumes:
      # ...

  # ...

  database:
    image: postgres:9.6-alpine # match what's being used by heroku
    networks:
      - database

  staging:
    image: staging
    networks:
      - traefik
      - database
deploy:
  labels:
    traefik.enable: "true"
    traefik.frontend.rule: Host:lotto-ticket.example.com
    traefik.docker.network: traefik
    traefik.port: 3000
Run Code Online (Sandbox Code Playgroud)

当我执行此操作时,反向代理开始返回网关超时代码,表明staging容器不再可用于网络traefikdatabase如果我从容器中删除网络staging,子域将按预期运行(尽管它显然无法访问数据库),并且当我将其重新添加时,反向代理开始从中超时。

两个网络之间是否存在某种冲突?我是否需要配置 IP 路由才能在单个容器上使用多个 docker 网络?

编辑:在配置摘录中添加更多详细信息

docker docker-network docker-stack

4
推荐指数
1
解决办法
7757
查看次数

docker stack rm后跟部署失败并在连续构建上运行

Jenkins构建部分中的Bash脚本

#!/bin/sh

docker build -t smstake:latest .

#Push to the private  repository applying the proper tags for the image
docker tag smstake:latest reg01.dev.01cloud.com:5000/smstake:1.0.1
docker push reg01.dev.01cloud.com:5000/smstake:1.0.1

docker stack rm smstake
docker stack deploy -c docker-compose.yml smstake
Run Code Online (Sandbox Code Playgroud)
  1. 在这里,我正在创建一个泊坞窗图像
  2. 添加适当的标签以推送到私有存储库
  3. 删除堆栈(如果存在),而不是再次部署堆栈.

问题是它在第一次构建时失败了,并且发布了一些网络问题.如果再次构建,它将在另一个构建上成功运行.我该如何解决这个问题.

我得到的错误:

Removing service smstake_app
Removing service smstake_db
Removing service smstake_phpmyadmin
Removing network smstake_smstake
Creating service smstake_app
failed to create service smstake_app: Error response from daemon: network smstake_smstake not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE
Run Code Online (Sandbox Code Playgroud)

正如我们可以看到它删除服务并在服务创建过程中抛出网络未发现问题. …

docker docker-compose docker-swarm docker-swarm-mode docker-stack

3
推荐指数
1
解决办法
688
查看次数

一个堆栈的服务与另一个堆栈之间的 Docker 通信

我正在尝试使用不同 docker 堆栈的简单服务发现方案。
假设我有 2 个堆栈。为简单起见,我将它们命名为 stackA 和 stackB。StackA 有一个名为“serviceA”的服务,StackB 有一个名为“serviceB”的服务。ServiceA 和 serviceB 有一个简单的 RestApplication。

现在我想从 serviceA 调用 serviceB。了解docker服务发现的概念,按照docker官方文档进行操作,但是无法调用serviceB。 在另一个堆栈上发现服务或容器

根据官方文档,我正在使用serviceB.StackB,但不能这样做。

无法理解原因。几点: 1.
每个堆栈创建自己的网络。是否因为两个堆栈不在同一网络中而发生?
2. 如果我只在不同的网络需要它们,我如何调用不同的服务

service-discovery resttemplate docker docker-stack

3
推荐指数
1
解决办法
883
查看次数

docker堆栈部署depends_on

给定撰写文件

version: '3.8'
services:
  whoami1:
    image: containous/whoami
    depends_on:
      - whoami2
  whoami2:
    image: containous/whoami
Run Code Online (Sandbox Code Playgroud)

当部署到 docker swarmdocker stack deploy -c docker-compose.yaml test 服务时whoami1whoami2似乎以随机顺序启动并忽略depends_on条件。

 docker stack deploy -c docker-compose.yaml test
Creating network test_default
Creating service test_whoami1
Creating service test_whoami2
Run Code Online (Sandbox Code Playgroud)

docker swarm 是否支持通过依赖项进行服务启动排序?

docker docker-compose docker-swarm docker-stack

3
推荐指数
1
解决办法
8117
查看次数

我可以在 docker 堆栈文件的约束中使用两个主机名吗?

我有一个堆栈文件,我试图在其中告诉它使用我提供的两个主机名中的一个。这可能吗?该服务并非以这些变量启动,但是,当删除至少其中一个变量时,它就可以工作。感谢您的帮助!

堆栈文件:

deploy:
    placement:
        constraints:
            - node.hostname == myhost1
            - node.hostname == myhost2
Run Code Online (Sandbox Code Playgroud)

docker docker-swarm docker-stack

2
推荐指数
1
解决办法
5387
查看次数

docker swarm列出服务的依赖关系

假设我们有以下堆栈文件:

version: "3"
services:
  ubuntu:
    image: ubuntu
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    entrypoint:
      - tail
      - -f
      - /dev/null
    logging:
      driver: "json-file"
    ports:
      - "80:80"
    networks:
      - webnet
  web:
    image: httpd
    ports:
      - "8080:8080"
    hostname: "apache"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
      resources:
        limits:
          memory: 32M
        reservations:
          memory: 16M
    depends_on:
      - "ubuntu"
    networks:
      - webnet
networks:
  webnet:
Run Code Online (Sandbox Code Playgroud)

当我运行时docker service inspect mystack_web,生成的输出不会显示对depends_on条目的任何引用。

这样可以吗?以及如何打印给定docker服务的依赖关系?

docker docker-swarm docker-stack

1
推荐指数
1
解决办法
1513
查看次数

如何将放置在 .env 文件中的变量传递给 docker swarm 中的容器?

我正在尝试对docker -composeswarm使用相同的 docker-compose.yml.env文件。变量来自通过在启动时运行 run.sh 脚本,.env文件中应该通过 sed 解析到配置文件中。使用该docker-compose up命令时,此设置工作正常,但当我使用该docker stack deploy命令时,它们没有通过。

如何将变量传递到容器中,以便run.sh脚本在启动时解析它们?

environment-variables docker docker-compose docker-swarm docker-stack

1
推荐指数
1
解决办法
2028
查看次数