docker - 防止开发容器在生产中运行
问题描述
我有一个docker-compose.yml
文件,其中包含一个 API 模拟容器以及 phpmyadmin 和 mongo-express 容器,这些容器都不应该在我的生产环境中启动。
我已经有单独.env
的文件用于生产和开发。是否可以使用活动.env
文件中的变量来禁用容器?
这是我的docker-compose.yml
:
services:
mysql:
build: ./docker/mysql
command: --default-authentication-plugin=mysql_native_password
container_name: mysql
entrypoint: sh -c "/usr/local/bin/docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USERNAME}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_RANDOM_ROOT_PASSWORD=yes
- MYSQL_ONETIME_PASSWORD=yes
ports:
- 3306:3306
restart: unless-stopped
volumes:
- ./data/mysql:/var/lib/mysql
phpmyadmin:
container_name: phpmyadmin
environment:
- PMA_HOST=mysql
image: phpmyadmin/phpmyadmin
ports:
- 8080:80
mongo:
build: ./docker/mongo
container_name: mongo
environment:
- MONGO_INITDB_DATABASE=${MONGO_DATABASE}
- MONGO_INITDB_ROOT_USERNAME=${MONGO_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
ports:
- 27017:27017
restart: unless-stopped
volumes:
- ./data/mongo:/data/db
mongo-express:
build: ./docker/mongo-express
container_name: mongo-express
depends_on:
- mongo
environment:
- ME_CONFIG_BASICAUTH_PASSWORD=redacted
- ME_CONFIG_BASICAUTH_USERNAME=username
- ME_CONFIG_MONGODB_ADMINUSERNAME=${MONGO_USERNAME}
- ME_CONFIG_MONGODB_ADMINPASSWORD=${MONGO_PASSWORD}
ports:
- 8081:8081
redis:
build: ./docker/redis
container_name: redis
ports:
- 6379:6379
restart: unless-stopped
volumes:
- ./data/redis:/data
mock-apis:
build: ./docker/mock-apis
container_name: mock-apis
command: >
/initscript.bash
ports:
- 81:80
volumes:
- ./mock-apis:/home/nodejs
php-fpm:
build:
context: ./docker/php-fpm
args:
HOST_UID: ${HOST_UID}
command: >
/initscript.bash
container_name: php-fpm
restart: unless-stopped
depends_on:
- mongo
- mysql
- redis
volumes:
- ./laravel:/var/www/
nginx:
build: ./docker/nginx
container_name: nginx
depends_on:
- php-fpm
ports:
- 80:80
restart: unless-stopped
volumes:
- ./laravel:/var/www/
version: "3"
解决方案
我正在使用配置文件来确定我的服务范围。如果我只想在 dev 中使用 PhpMyAdmin,我将此配置文件添加到服务中:
phpmyadmin:
container_name: phpmyadmin
environment:
- PMA_HOST=mysql
image: phpmyadmin/phpmyadmin
ports:
- 8080:80
profiles: ["dev"]
所以现在我必须告诉 docker compose 如果我想使用 dev 配置文件。否则不会启动。
您可以使用以下命令之一(通过这种方式,您必须--profile your_profil
为每个配置文件键入):
$ docker-compose --profile dev up -d
$ docker-compose --profile dev --profile profil2 up -d <- for multiple profiles
或者更简洁的方式,你可以用逗号分隔你的服务:
$ COMPOSE_PROFILES=dev,profil2 docker-compose up -d
没有配置文件属性的服务将始终启用。
关心何时停止服务,您也必须指定配置文件:
$ COMPOSE_PROFILES=dev docker-compose down
推荐阅读
- c++ - 将向量(或其他任何东西)从外部移动到类成员的正确方法是什么?
- javascript - 当我在页面上滚动时,我的图像会跳动
- node.js - Nodemail - sendMail 无法读取未定义的属性“sendMail”
- vue.js - e.$OneSignal.on 不是 Nuxtjs PWA 的函数 - OneSignal
- django - django 的 AWS redis 服务器配置
- node.js - 如何在 mongodb (mongoose) 中实现食谱
- php - 问题理解 PHP 中的二维数组搜索
- python - 如何在 django 中覆盖密码表单的 help_text 和标签
- flutter - firestore queryBuilder中的多个where查询
- javascript - (节点:47028)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“表情符号”