我在 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
的公共图像(例如 nginx
图像),那么我可以轻松创建服务。
如何使用预构建的本地镜像来创建服务?
以下是用于构建映像的 Dockerfile
和 app.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 的公共映像来创建服务
答案 0 :(得分:1)
除非您将映像“推送”到 docker 注册表(docker hub 或 a private one),否则您构建的映像仅存在于您的本地机器上(并且 swarm 节点无法访问)。
因此,您要么需要推送到 docker hub,要么运行您自己的注册表。在后一种情况下,请确保可以从 swarm 节点访问注册主机。