【问题标题】:Stop a docker-compose service which is using environment variable from an other repertory on the host停止使用主机上其他目录中的环境变量的 docker-compose 服务
【发布时间】:2021-02-07 20:21:20
【问题描述】:

我在/opt/myapp/docker-compose.yml 有一个撰写文件(在同一个地方的其他人身上)。

我想运行docker-compose stop,但从主机上的其他位置运行,比如说/home/username/scripts/。当我跑步时:

docker-compose -f /opt/myapp/docker-compose.yml stop

它引发了这个错误:

ERROR: The Compose file '/opt/myapp/docker-compose.yml' is invalid because:
services.myapp-db.ports contains an invalid type, it should be a number, or an object
services.myapp-nginx.ports contains an invalid type, it should be a number, or an object

我怀疑这是因为我使用环境变量设置了这些端口值,这些环境变量在位于 docker-compose.yml 文件附近的 .env 文件中定义。例如:

version: '3.8'

volumes:
  dbdata: {}

services:
  db:
    image: postgres
    environment:
      POSTGRES_DB: 
      POSTGRES_USER:
      POSTGRES_PASSWORD:
    volumes:
      - dbdata:/var/lib/postgresql/data
    ports:
      - ${PORT}:5432

  web:
    image: nginx
    environment:
      NGINX_HOST:
      NGINX_PORT:
    volumes:
      - ./templates:/etc/nginx/templates
    ports:
      - "${PORT2}:80"

问题

考虑到正确的环境变量,但从主机?

【问题讨论】:

  • 请帮忙分享你的docker-compose.yml文件

标签: docker docker-compose environment-variables


【解决方案1】:

选项 1:

直接在shell中导出MY_APP_PORT变量的值:

export MY_APP_PORT='put_your_ip_here' && docker-compose -f /opt/myapp/docker-compose.yml stop

选项 2:

使用--env-file参数

docker-compose --env-file /opt/myapp/.env -f /opt/myapp/docker-compose.yml stop

https://docs.docker.com/compose/environment-variables/

选项 3:

docker-compose.yaml 中定义.env 文件的路径

version: '3.8'

volumes:
  dbdata: {}

services:
  db:
    image: postgres
    environment:
      POSTGRES_DB: 
      POSTGRES_USER:
      POSTGRES_PASSWORD:
    volumes:
      - dbdata:/var/lib/postgresql/data
    env_file:
      - /opt/myapp/.env
    ports:
      - ${PORT}:5432

  web:
    image: nginx
    environment:
      NGINX_HOST:
      NGINX_PORT:
    volumes:
      - ./templates:/etc/nginx/templates
    env_file:
      - /opt/myapp/.env
    ports:
      - "${PORT2}:80"

https://medium.com/better-programming/using-variables-in-docker-compose-265a604c2006

选项 4:

通过-e 标志发送MY_APP_PORT 变量的值

docker-compose -f -e MY_APP_PORT='put_your_ip_here' /opt/myapp/docker-compose.yml stop 

【讨论】:

  • 我在想,如果 .env 路径没有在撰写文件中手动设置,那就是暗示。但就目前的情况来看,实际情况似乎并非如此。选项 2 适合我的使用。但是感谢您的扩展回答,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2019-10-06
  • 2015-06-17
  • 2019-07-26
  • 2021-09-02
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多