【问题标题】:Docker swarm did not update serviceDocker swarm 没有更新服务
【发布时间】:2018-03-02 03:37:30
【问题描述】:

我使用docker stack deploy 部署我的python 服务。

首先,我编辑代码。

然后

docker build . -f Dockerfile -t my_service:$TAG docker tag my_service:$TAG register.xxx.com:5000/my_service:$TAG

当我使用docker run -p 9000:9000 register.xxx.com:5000/my_service:$TAG

成功了。

但是,当我使用docker stack deploy -c docker-compose.yml my_service_stack

服务仍在运行旧代码。

docker-compose.yaml部分:

web: image: register.xxx.com:5000/my_service:v0.0.12 depends_on: - redis - db - rabbit links: - redis - db - rabbit volumes: - web_service_data:/home networks: - webnet

v0.0.12 == $TAG

Dockerfile:

```

FROM python:3.6.4

运行用户添加 -ms /bin/bash gmt

运行 mkdir -p /home/logs

WORKDIR /home/gmt/src

复制/src/requirements.txt。

运行 pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

复制/src。

运行 cat /home/gmt/src/setting/env.yaml

ENV PYTHONPATH=/home/gmt/src

CMD ["gunicorn", "-c", "/home/gmt/src/gunicornconf.py", "run:app"]

```

那么,为什么?

【问题讨论】:

  • 然后执行docker service ls,IMAGE 是对的。
  • 好的,我知道了,问题是:volumes: - web_service_data:/home

标签: docker docker-compose docker-swarm


【解决方案1】:
  1. 我没有看到您实际上将映像从构建服务器推送到注册表。我假设您在构建之后和部署之前这样做。

  2. 您不应该将卷用于代码。该卷将使用该卷的内容覆盖容器中的 /home,这些内容可能已过时。在卷中使用/存储代码是一种反模式。

  3. 你不需要links:they are legacy

  4. depends_on: 未在 swarm 中使用。

  5. 你不应该在容器中存储日志,你should have them sent to stdout and stderr

【讨论】:

  • 好的,我回答你的问题了吗? Docker 不会继续将映像路径中的内容“同步”到覆盖它的卷路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
相关资源
最近更新 更多