13

我尝试使用docker stack deploy命令部署一个堆栈(包含一个服务),并在 swarm 上从我的应用程序运行 2 个实例!这是我的 docker-compose 文件:

version: "3"
services:
  server:
    image: makbn/thumbnailer-server:v1
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      resources:
        limits:
          cpus: "0.1"
          memory: 1024M
      restart_policy:
        condition: on-failure
    ports:
      - 8080:8080
    networks: 
      - server_network
networks: 
  server_network:

运行sudo docker stack deploy -c ./docker-compose.yml ts命令后,我的堆栈成功部署到 swarm,但这是我的docker stack ps ts 输出:

ID                  NAME                IMAGE                         NODE                DESIRED STATE       CURRENT STATE             ERROR                              PORTS
8zmjp6wt47ki        ts_server.1         makbn/thumbnailer-server:v1   fanap9-lp           Ready               Rejected 2 seconds ago    "mkdir /var/lib/docker: permis…"   
88vizpnabbi8         \_ ts_server.1     makbn/thumbnailer-server:v1   fanap9-lp           Shutdown            Rejected 7 seconds ago    "mkdir /var/lib/docker: permis…"   
609hl7hy7tnu         \_ ts_server.1     makbn/thumbnailer-server:v1   fanap9-lp           Shutdown            Rejected 12 seconds ago   "mkdir /var/lib/docker: permis…"   
gif8fvbgdhpy         \_ ts_server.1     makbn/thumbnailer-server:v1   fanap9-lp           Shutdown            Rejected 17 seconds ago   "mkdir /var/lib/docker: permis…"   
x60x9c6albe5         \_ ts_server.1     makbn/thumbnailer-server:v1   fanap9-lp           Shutdown            Rejected 22 seconds ago   "mkdir /var/lib/docker: permis…"   
ugvbw1gpdp8e        ts_server.2         makbn/thumbnailer-server:v1   fanap9-lp           Ready               Rejected 2 seconds ago    "mkdir /var/lib/docker: permis…"   
p34x1kp55ch8         \_ ts_server.2     makbn/thumbnailer-server:v1   fanap9-lp           Shutdown            Rejected 7 seconds ago    "mkdir /var/lib/docker: permis…"   
3exxflukrl4y         \_ ts_server.2     makbn/thumbnailer-server:v1   fanap9-lp           Shutdown            Rejected 12 seconds ago   "mkdir /var/lib/docker: permis…"   
ud83xfj5nefj         \_ ts_server.2     makbn/thumbnailer-server:v1   fanap9-lp           Shutdown            Rejected 17 seconds ago   "mkdir /var/lib/docker: permis…"   
ws35na8up793         \_ ts_server.2     makbn/thumbnailer-server:v1   fanap9-lp           Shutdown            Rejected 22 seconds ago   "mkdir /var/lib/docker: permis…"   

完整的错误消息是mkdir /var/lib/docker: permission denied

另一个问题是,当我尝试使用已docker service create部署并成功运行的命令服务创建堆栈时,但我无法从本地主机访问该服务!我有两个问题:

  1. 从撰写文件部署堆栈有什么问题,为什么我得到mkdir /var/lib/docker: permission denied错误?
  2. 如何将我的服务网络 k 配置为可从主机访问?
4

2 回答 2

10

(注意:仅与可能通过 docker 安装过的用户相关snap

我遇到这个问题是因为我snap安装了 docker,这意味着 docker-compose 对我的 docker 安装感到困惑。给出了文件权限错误,/var/lib/docker因为我的系统实际上是在使用 docker/snap/bin/docker

要检查您是否属于这种情况,您可以运行which docker. 如果它返回/usr/bin/docker,您已经完成了正常的应用安装。如果它在路径上返回一些东西,/snap/这意味着您已经从 snap docker 包安装(不再维护。参考:https ://github.com/docker/docker-snap )

为了解决这个问题,我首先卸载了 snap docker install using snap remove docker,然后通过https://docs.docker.com/install/linux/docker-ce/ubuntu/#docker-ee-customersdocker上的安装说明进行安装。一旦我这样做了,我就可以毫无问题地部署堆栈。

我不记得我的想法是从哪里来的 snap install docker,但是通过设置存储库然后运行来安装sudo apt install docker.io似乎是要走的路。

于 2018-11-30T18:00:42.377 回答
0

我在几个小时前解决了这个问题,由于同样的 Permission Denied 错误,容器将显示为被拒绝和关闭。我也有同样的背景,能够手动创建+扩展服务,但不能用我的.yml.

按照入门指南,在他们的docker-compose.yml示例中,他们使用version: "3"但没有继续说这应该与您相应的 Compose File Format 编号匹配。根据我安装的 Docker 版本,我的号码最终是“3.7”,并且在我docker-compose.yml相应地更改它之后,我的容器能够按预期通过docker stack deploy -c docker-compose.yml some-name.

编写文件格式 (CFF):Docker 引擎版本 (DCR)

CFF     DCR
3.7     18.06.0+
3.6     18.02.0+
3.5     17.12.0+
3.4     17.09.0+
3.3     17.06.0+
3.2     17.04.0+
3.1     1.13.1+
3.0     1.13.0+
2.4     17.12.0+
2.3     17.06.0+
2.2     1.13.0+
2.1     1.12.0+
2.0     1.10.0+
1.0     1.9.1.+

可用的参考文档(这里

无效到有效更改的示例

# From the Example
version: "3"
services:
  web:
    image: username/repo:tag

# What's actually required (in my case, because I'm using docker version 18.09.2)
version: "3.7"
services:
  web:
    image: username/repo:tag

改变后的结果

owner@test_server:~/myyml$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                               PORTS
baxip2g6xgzy        first-swarm_web     replicated          5/5                 [username]/getting-started:my-serv   *:4000->80/tcp

owner@test_server:~/myyml$ docker service ps first-swarm_web
ID                  NAME                IMAGE                               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
ss6jn07htkhp        first-swarm_web.1   [username]/getting-started:my-serv   test_server         Running             Running 37 minutes ago                       
n5eael5ae3jl        first-swarm_web.2   [username]/getting-started:my-serv   test_server         Running             Running 37 minutes ago                       
kzb3l1hzdpet        first-swarm_web.3   [username]/getting-started:my-serv   test_server         Running             Running 37 minutes ago                       
6ijgoebvhhdg        first-swarm_web.4   [username]/getting-started:my-serv   test_server         Running             Running 37 minutes ago                       
h0mbz1fp1id6        first-swarm_web.5   [username]/getting-started:my-serv   test_server         Running             Running 37 minutes ago
于 2019-02-21T23:08:04.743 回答