如何使用预构建的本地镜像在 Docker Swarm 中创建服务

时间:2021-02-24 06:42:09

标签: docker docker-swarm

我在 Docker Swarm 中创建了 3 个节点,1 个作为管理器,另外 2 个作为工作器,如下所示

enter image description here

现在,当我尝试使用本地映像 app1:latest 创建服务(在管理器节点上)时,出现错误(如下所述)。

$ sudo docker service create --name app1 -p 5001:5000 app1:latest                                                                                                                         
image app1:latest could not be accessed on a registry to record
its digest. Each node will access app1:latest independently,
possibly leading to different nodes running different
versions of the image.

i6s8hyzzuxx35enl2j0xd3ef9
overall progress: 0 out of 1 tasks 
1/1: No such image: app1:latest 

另一方面,如果我使用来自 Docker Hub 的公共图像(例如 nginx 图像),那么我可以轻松创建服务。

如何使用预构建的本地镜像来创建服务?

以下是用于构建映像的 Dockerfileapp.py 文件 app1:latest

Dockerfile

FROM ubuntu:18.04

RUN apt-get update \
    && apt-get install -y apt-utils \
    python3.6 \
    python3-pip

WORKDIR /app
COPY . /app

RUN pip3 install -r requirements.txt

ENTRYPOINT ["python3"]
CMD ["app.py"]

app.py

from flask import Flask
from flask import jsonify

app = Flask(__name__)

@app.route('/')
def index():
    return jsonify('App #1')


if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

我关注了一些关于 Docker Swarm 的文章和视频教程,但它们都使用来自 Docker Hub 的公共映像来创建服务

1 个答案:

答案 0 :(得分:1)

除非您将映像“推送”到 docker 注册表(docker hub 或 a private one),否则您构建的映像仅存在于您的本地机器上(并且 swarm 节点无法访问)。

因此,您要么需要推送到 docker hub,要么运行您自己的注册表。在后一种情况下,请确保可以从 swarm 节点访问注册主机。