如何从docker-compose.yml获取端口或环境变量

时间:2019-02-19 17:35:00

标签: node.js docker-compose

我尝试process.env.port来获取环境中的端口变量,但是在构建docker时它没有任何变化。如果我有两个这样的服务泊坞窗,如何从mongo获取端口

services:
  app:
    image: lostproperty
    container_name: lost-property
    ports:
      - "127.0.0.1:3100:3000"
    environment:
      - port :"3100"
      - API_URL:"http://localhost:3000/lost-property/"
    depends_on:
      - mongo
    volumes: 
      -  ../app:/var/www/html
    stdin_open: true
    tty: true
    restart: always
  mongo:
    image: mongo
    ports: 
      - "127.0.0.1:27018:27017"
    volumes:
      - ./data:/data/db
    environment: 
      - MONGO_URL:"mongodb://localhost:27017/lost-property"` 

2 个答案:

答案 0 :(得分:1)

通过将其包含在docker-compose文件中,可以确保两个容器都能够使用其容器名称相互通信。这样,财产损失就可以通过mongodb:// mongo:27017

与mongo对话
networks:
  default:
    external:
      name: my-network

您可能想在与docker-compose.yml相同的目录中创建一个.env文件。在.env中,使用类似

MONGO_PORT=27017
MONGO_URL=mongodb://mongo:27017/lost-property
API_URL=http://localhost:3000/lost-property/
PORT=3100

在docker-compose文件中,像这样使用环境配置

services:
  app:
    environment:

    image: lostproperty
    container_name: lost-property
    ports:
      - ${PORT}:${PORT}
    environment:
      - PORT
      - API_URL
      - MONGO_PORT
      - MONGO_URL
    depends_on:
      - mongo
    volumes: 
      -  ../app:/var/www/html
    stdin_open: true
    tty: true
    restart: always
  mongo:
    image: mongo
    ports: 
      - ${MONGO_PORT}:${MONGO_PORT}
    volumes:
      - ./data:/data/db
    environment: 
      - MONGO_URL

将VALUE用于环境部分,将$ {VALUE}用于其他任何地方(例如在端口中)。 然后在您的app.js或index.js或任何您可以使用的端口和网址中获取

process.env.MONGO_PORT
process.env.MONGO_URL
process.env.PORT
process.env.API_URL

您可以输入

docker-compose config

在运行docker-compose up之前查看配置的样子

此外,如果您运行的是带有express之类的api服务器,则需要使用0.0.0.0作为ip进行监听,而不是127.0.0.1(如果您希望能够从容器外部访问/测试它)和他们的网络

答案 1 :(得分:0)

首先,dockerfile有一个EXPOSE句子,您在其中公开了容器的特定端口。您无法更改该曝光。

第二,旧金山日出说,您可以使用相同的网络并将其链接。