- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于我们的docker-compose配置非常庞大,我们希望将其分成多个文件。
每个文件都定义了我们应用程序的一部分(数据库,后端,工作器等),应该可以随意停止和启动(异常(exception):数据库需要首先运行-其他容器链接到它们并依赖它们)。
但是,我们还有一个媒体服务,该服务创建并持久存储存储数据库所需的Docker卷,...
docker-compose.database.yml:
version: '2'
services:
media:
build: ./docker/app_data
env_file: ./envs/.${ENVIRONMENT_NAME}
volumes:
- /data/db
- /data/files
- /data/mydb
- /logs
command: /bin/true
networks:
- my-net
(...)
memcached:
extends:
file: common-services.yml
service: memcached
env_file: ./envs/.${ENVIRONMENT_NAME}
restart: on-failure
mem_limit: 4g
command: memcached -m 3072m -vv
ports:
- "11211:11211"
networks:
- my-net
docker-compose.app.yml:
version: '2'
services:
app:
extends:
file: common-services.yml
service: app
env_file: ./envs/.${ENVIRONMENT_NAME}
restart: on-failure
command: "/wait-for-it.sh postgres:5432 -- /entrypoint.sh"
external_links:
- myproj_mongo_1:mongo
- myproj_rabbitmq_1:rabbitmq
- myproj_memcached_1:memcached
- myproj_postgres_1:postgres
volumes_from:
- media
- fe
ports:
- "8000:8000"
networks:
- my-net
fe:
extends:
file: common-services.yml
service: fe
env_file: ./envs/.${ENVIRONMENT_NAME}
command: npm run build
networks:
- my-net
每当我尝试将docker-compose.app.yml配置与docker-compose一起使用以执行任何操作(启动,执行,...)时,docker-compose存在,但出现以下错误:
docker-compose -f docker-compose.app.yml up -d --remove-orphans
ERROR: Service "app" mounts volumes from "media", which is not the name of a service or container.
现在的问题是:如何从媒体正确加载卷?我唯一的想法(但要避免的话,如果有更好的解决方案,因为必须更改很多脚本,所以要避免)是在另一个docker-compose.yml文件中定义媒体,该文件始终与另一个docker一起加载-compose.yml文件。
最佳答案
最后,这就是我的解决方法(基本上,我屈从于复杂的文件管理,因为docker-compose不支持任何其他对我有帮助的东西):
1)将服务分成逻辑部分,例如docker-compose.database.yml
2)将媒体服务放入另一个文件:docker-compose.media.yml
3)创建基本用扩展版本替换docker-compose命令的脚本,该扩展版本也加载docker-compose.media.yml
我们还进一步扩展了此功能,并在脚本中添加了针对特定变体的查找功能(例如清理SFTP容器以便在启动时重新创建它们,将所有更改加载到公钥注册表中或正确关闭所有数据库)
我们还以相同的方式查找特定于环境的文件(例如,为特定服务器设置特殊设置):
下面是我们用于运行和停止的示例:
docker_run.sh
#!/bin/bash
PWD_DIR=$(pwd)
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
cd ${SCRIPT_DIR}
cd ..
SERVER_COMPONENT=$1
export ENVIRONMENT_NAME=$2
if [ ! -f docker-compose.${SERVER_COMPONENT}."${ENVIRONMENT_NAME}".yml ]; then
ENVIRONMENT_FILE=""
else
ENVIRONMENT_FILE="-f docker-compose.${SERVER_COMPONENT}."${ENVIRONMENT_NAME}".yml"
fi
if [ ! -f docker-compose.media."${ENVIRONMENT_NAME}".yml ]; then
MEDIA_ENVIRONMENT_FILE=""
else
MEDIA_ENVIRONMENT_FILE="-f docker-compose.media."${ENVIRONMENT_NAME}".yml"
fi
docker-compose -f docker-compose.media.yml ${MEDIA_ENVIRONMENT_FILE} -f docker-compose."${SERVER_COMPONENT}".yml ${ENVIRONMENT_FILE} stop
docker-compose -f docker-compose.media.yml ${MEDIA_ENVIRONMENT_FILE} -f docker-compose."${SERVER_COMPONENT}".yml ${ENVIRONMENT_FILE} up -d
cd ${PWD_DIR}
#!/bin/bash
PWD_DIR=$(pwd)
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
cd ${SCRIPT_DIR}
cd ..
SERVER_COMPONENT=$1
export ENVIRONMENT_NAME=$2
if [ ! -f docker-compose.${SERVER_COMPONENT}."${ENVIRONMENT_NAME}".yml ]; then
ENVIRONMENT_FILE=""
else
ENVIRONMENT_FILE="-f docker-compose.${SERVER_COMPONENT}."${ENVIRONMENT_NAME}".yml"
fi
if [ ! -f docker-compose.media."${ENVIRONMENT_NAME}".yml ]; then
MEDIA_ENVIRONMENT_FILE=""
else
MEDIA_ENVIRONMENT_FILE="-f docker-compose.media."${ENVIRONMENT_NAME}".yml"
fi
if [ ! -f bin/docker_stop."${SERVER_COMPONENT}".sh ]; then
# no special docker stio handling
docker-compose -f docker-compose.media.yml ${MEDIA_ENVIRONMENT_FILE} -f docker-compose."${SERVER_COMPONENT}".yml ${ENVIRONMENT_FILE} stop
else
bin/docker_stop."${SERVER_COMPONENT}".sh ${SERVER_COMPONENT} ${ENVIRONMENT_NAME}
fi
cd ${PWD_DIR}
version: '2'
services:
media:
build: ./docker/app_data
env_file: ./envs/.${ENVIRONMENT_NAME}
volumes:
- /data/db
- /data/files
- /data/postgresdb
- /logs
command: /bin/true
networks:
- my-net
networks:
my-net:
version: '2'
services:
(...)
postgres:
extends:
file: common-3rdParty-services.yml
service: postgres
env_file: ./envs/.${ENVIRONMENT_NAME}
restart: on-failure
volumes_from:
- media
environment:
PGDATA: /data/postgresdb
version: '2'
services:
(...)
postgres:
ports:
- "5432:5432"
#!/bin/bash
PWD_DIR=$(pwd)
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
cd ${SCRIPT_DIR}
cd ..
SERVER_COMPONENT=$1
export ENVIRONMENT_NAME=$2
if [ ! -f docker-compose.${SERVER_COMPONENT}."${ENVIRONMENT_NAME}".yml ]; then
ENVIRONMENT_FILE=""
else
ENVIRONMENT_FILE="-f docker-compose.${SERVER_COMPONENT}."${ENVIRONMENT_NAME}".yml"
fi
if [ ! -f docker-compose.media."${ENVIRONMENT_NAME}".yml ]; then
MEDIA_ENVIRONMENT_FILE=""
else
MEDIA_ENVIRONMENT_FILE="-f docker-compose.media."${ENVIRONMENT_NAME}".yml"
fi
docker-compose -f docker-compose.media.yml ${MEDIA_ENVIRONMENT_FILE} -f docker-compose.database.yml ${ENVIRONMENT_FILE} exec mongo mongod --shutdown
docker-compose -f docker-compose.media.yml ${MEDIA_ENVIRONMENT_FILE} -f docker-compose.database.yml ${ENVIRONMENT_FILE} exec rabbitmq rabbitmqctl shutdown
docker-compose -f docker-compose.media.yml ${MEDIA_ENVIRONMENT_FILE} -f docker-compose.database.yml ${ENVIRONMENT_FILE} exec -u postgres postgres pg_ctl stop
docker-compose -f docker-compose.media.yml ${MEDIA_ENVIRONMENT_FILE} -f docker-compose.database.yml ${ENVIRONMENT_FILE} stop
cd ${PWD_DIR}
关于docker - 从volumes_from中的另一个docker-compose文件引用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47093932/
您能否提供一个使用 volumes_from 从容器 A 到容器 B 共享路径的示例,以及容器 B 在共享完成后如何访问该路径。 谢谢 最佳答案 如文档所述 volumes如果您在 version 3
我正在尝试使用 docker compose 创建 Nginx/PHP FPM 设置,但我遇到了版本 3 卷语法/更改的问题。 我的Dockerfile: FROM php:7-fpm VOLUME
这里似乎有类似的问题(docker-compose volumes_from equivalent with version 3、How to replace volumes_from in dock
我有两个容器: nginx & 角度 . 角度 容器包含代码,并在有新版本(带有瞭望塔)时自动从注册表中提取。 我在 之间设置了一个共享卷角度 & nginx 分享来自 的代码角度 至 nginx .
我是一名优秀的程序员,十分优秀!