Docker: 不允许附加属性 pull_policy
Docker: Additional property pull_policy is not allowed
大家好,请原谅我的英语不好。当我尝试使用此命令
部署 docker 应用程序时,我正在使用 docker 群
docker stack deploy -c docker-compose.yml -c docker-compose.prod.yml chatappapi
显示下一个错误:services.chat-app-api Additional property pull_policy is not allowed
为什么会这样?
我该如何解决?
docker-compose.yml
version: "3.9"
services:
nginx:
image: nginx:stable-alpine
ports:
- "5000:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
chat-app-api:
build: .
image: username/myapp
pull_policy: always
volumes:
- ./:/app
- /app/node_modules
environment:
- PORT= 5000
- MAIL_USERNAME=${MAIL_USERNAME}
- MAIL_PASSWORD=${MAIL_PASSWORD}
- CLIENT_ID=${CLIENT_ID}
- CLIENT_SECRET=${CLIENT_SECRET}
- REDIRECT_URI=${REDIRECT_URI}
- REFRESH_TOKEN=${REFRESH_TOKEN}
depends_on:
- mongo-db
mongo-db:
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: 'username'
MONGO_INITDB_ROOT_PASSWORD: 'password'
ports:
- "27017:27017"
volumes:
- mongo-db:/data/db
volumes:
mongo-db:
docker-compose.prod.yml
version: "3.9"
services:
nginx:
ports:
- "80:80"
chat-app-api:
deploy:
mode: replicated
replicas: 8
restart_policy:
condition: any
update_config:
parallelism: 2
delay: 15s
build:
context: .
args:
NODE_ENV: production
environment:
- NODE_ENV=production
- MONGO_USER=${MONGO_USER}
- MONGO_PASSWORD=${MONGO_PASSWORD}
- MONGO_IP=${MONGO_IP}
command: node index.js
mongo-db:
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
信息
- docker-compose版本1.29.2
- Docker 版本 20.10.8
- Ubuntu 20.04.2 LTS
提前致谢。
您的问题行在 docker-compose.yml
chat-app-api:
build: .
image: username/myapp
pull_policy: always # <== this is the bad line, delete it
docker compose file reference 在 api 中没有任何 pull_policy
因为
If the image does not exist, Compose attempts to pull it, unless you have also specified build, in which case it builds it using the specified options and tags it with the specified tag.
我认为 pull_policy
曾经是写作的东西 ?也许保持最新的 api 文档处于打开状态,以便在您进行开发时参考 to/search(使用 compose 可以并且确实经常更改)。
如果你想确保将最新版本的图像拉到集群中的所有服务器上,那么 运行 docker compose -f ./docker-compose.yml pull
依次在每个服务器上(docker 堆栈不运行 还没有在整个群中使用此功能)。
顺便说一句:如果没有充分的理由,我不会将两个 .yml
文件与一个 docker stack
命令组合在一起。
您正在将 docker-compose 和 docker 大量想法混合在同一个文件中:
可能值得将您的项目分成 3 个文件:
docker-compose.yml
这将只包含 compose 和 swarm 通用的基本服务定义。
docker-compose.override.yml
方便的是,docker-compose 和 docker compose 都应该自动读取这个文件。此文件应包含任何“port:”、“depends_on:”、“build:”指令以及用于开发的任何便利卷。
stack.production.yml
堆栈部署中使用的覆盖文件应包含 swarm 而非 compose 理解的所有内容,并且 b.生产所需的一切。
在这里,您将使用 configs:
甚至 secrets:
而不是到本地文件夹的卷映射来将内容注入容器。与其依赖 ports:
指令,不如在 swarm 上安装入口路由器,例如 traefik
。等等。
通过这种安排,docker compose
可用于在本地开发和构建您的 compose 堆栈,并且 docker stack deploy
不必暴露于它不理解的 compose 语法。
pull_policy
是最新版本的 docker-compose.
要升级您的 docker-compose,请参考:
https://docs.docker.com/compose/install/
更多信息的规范:
https://github.com/compose-spec/compose-spec/blob/master/spec.md#pull_policy
大家好,请原谅我的英语不好。当我尝试使用此命令
部署 docker 应用程序时,我正在使用 docker 群docker stack deploy -c docker-compose.yml -c docker-compose.prod.yml chatappapi
显示下一个错误:services.chat-app-api Additional property pull_policy is not allowed
为什么会这样? 我该如何解决?
docker-compose.yml
version: "3.9"
services:
nginx:
image: nginx:stable-alpine
ports:
- "5000:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
chat-app-api:
build: .
image: username/myapp
pull_policy: always
volumes:
- ./:/app
- /app/node_modules
environment:
- PORT= 5000
- MAIL_USERNAME=${MAIL_USERNAME}
- MAIL_PASSWORD=${MAIL_PASSWORD}
- CLIENT_ID=${CLIENT_ID}
- CLIENT_SECRET=${CLIENT_SECRET}
- REDIRECT_URI=${REDIRECT_URI}
- REFRESH_TOKEN=${REFRESH_TOKEN}
depends_on:
- mongo-db
mongo-db:
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: 'username'
MONGO_INITDB_ROOT_PASSWORD: 'password'
ports:
- "27017:27017"
volumes:
- mongo-db:/data/db
volumes:
mongo-db:
docker-compose.prod.yml
version: "3.9"
services:
nginx:
ports:
- "80:80"
chat-app-api:
deploy:
mode: replicated
replicas: 8
restart_policy:
condition: any
update_config:
parallelism: 2
delay: 15s
build:
context: .
args:
NODE_ENV: production
environment:
- NODE_ENV=production
- MONGO_USER=${MONGO_USER}
- MONGO_PASSWORD=${MONGO_PASSWORD}
- MONGO_IP=${MONGO_IP}
command: node index.js
mongo-db:
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
信息
- docker-compose版本1.29.2
- Docker 版本 20.10.8
- Ubuntu 20.04.2 LTS
提前致谢。
您的问题行在 docker-compose.yml
chat-app-api:
build: .
image: username/myapp
pull_policy: always # <== this is the bad line, delete it
docker compose file reference 在 api 中没有任何 pull_policy
因为
If the image does not exist, Compose attempts to pull it, unless you have also specified build, in which case it builds it using the specified options and tags it with the specified tag.
我认为 pull_policy
曾经是写作的东西 ?也许保持最新的 api 文档处于打开状态,以便在您进行开发时参考 to/search(使用 compose 可以并且确实经常更改)。
如果你想确保将最新版本的图像拉到集群中的所有服务器上,那么 运行 docker compose -f ./docker-compose.yml pull
依次在每个服务器上(docker 堆栈不运行 还没有在整个群中使用此功能)。
顺便说一句:如果没有充分的理由,我不会将两个 .yml
文件与一个 docker stack
命令组合在一起。
您正在将 docker-compose 和 docker 大量想法混合在同一个文件中:
可能值得将您的项目分成 3 个文件:
docker-compose.yml
这将只包含 compose 和 swarm 通用的基本服务定义。
docker-compose.override.yml
方便的是,docker-compose 和 docker compose 都应该自动读取这个文件。此文件应包含任何“port:”、“depends_on:”、“build:”指令以及用于开发的任何便利卷。
stack.production.yml
堆栈部署中使用的覆盖文件应包含 swarm 而非 compose 理解的所有内容,并且 b.生产所需的一切。
在这里,您将使用 configs:
甚至 secrets:
而不是到本地文件夹的卷映射来将内容注入容器。与其依赖 ports:
指令,不如在 swarm 上安装入口路由器,例如 traefik
。等等。
通过这种安排,docker compose
可用于在本地开发和构建您的 compose 堆栈,并且 docker stack deploy
不必暴露于它不理解的 compose 语法。
pull_policy
是最新版本的 docker-compose.
要升级您的 docker-compose,请参考: https://docs.docker.com/compose/install/
更多信息的规范: https://github.com/compose-spec/compose-spec/blob/master/spec.md#pull_policy