如何使用预构建的本地映像在 Docker Swarm 中创建服务
How to create service in Docker Swarm using prebuilt local image
我在 Docker Swarm
中创建了 3 个节点,1 个作为管理员,另外 2 个作为工作人员,如下所示
现在,当我尝试使用本地映像创建服务(在管理器节点上)时 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
的 public 图像(例如 nginx
图像),那么我可以轻松创建服务。
如何使用预构建的本地镜像来创建服务?
下面是用于构建映像的 Dockerfile
和 app.py
文件 app1:latest
Docker文件
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 的 public 图像来创建服务
除非您将映像“推送”到 docker 注册表(docker 集线器或 a private one),否则您构建的映像仅存在于您的本地计算机上(并且不可访问群节点)。
因此,您要么需要推送到 docker 集线器,要么 运行 您自己的注册表。在后一种情况下,请确保可以从 swarm 节点访问注册表主机。
我在 Docker Swarm
中创建了 3 个节点,1 个作为管理员,另外 2 个作为工作人员,如下所示
现在,当我尝试使用本地映像创建服务(在管理器节点上)时 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
的 public 图像(例如 nginx
图像),那么我可以轻松创建服务。
如何使用预构建的本地镜像来创建服务?
下面是用于构建映像的 Dockerfile
和 app.py
文件 app1:latest
Docker文件
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 的 public 图像来创建服务
除非您将映像“推送”到 docker 注册表(docker 集线器或 a private one),否则您构建的映像仅存在于您的本地计算机上(并且不可访问群节点)。
因此,您要么需要推送到 docker 集线器,要么 运行 您自己的注册表。在后一种情况下,请确保可以从 swarm 节点访问注册表主机。