为什么入口点设置为';bin/true';在docker-compose.yml中

为什么入口点设置为';bin/true';在docker-compose.yml中,docker,docker-compose,Docker,Docker Compose,这是MEAN.js中的docker compose.yml文件。谁能解释一下为什么web数据和db数据的入口点设置为/bin/true?这有必要吗?如果我移除它会发生什么?非常感谢 version: '2' services: web: restart: always build: . container_name: meanjs ports: - "3000:3000" - "5858:5858" - "8080:8080"

这是MEAN.js中的
docker compose.yml
文件。谁能解释一下为什么web数据和db数据的
入口点设置为
/bin/true
?这有必要吗?如果我移除它会发生什么?非常感谢

version: '2' services: web: restart: always build: . container_name: meanjs ports: - "3000:3000" - "5858:5858" - "8080:8080" - "35729:35729" environment: - NODE_ENV=development - DB_1_PORT_27017_TCP_ADDR=db depends_on: - db volumes_from: - web-data web-data: build: . entrypoint: /bin/true volumes: - ./:/opt/mean.js - /opt/mean.js/node_modules - /opt/mean.js/public - /opt/mean.js/uploads db: image: mongo:3.2 restart: always ports: - "27017:27017" volumes_from: - db-data db-data: image: mongo:3.2 volumes: - /data/db - /var/lib/mongodb - /var/log/mongodb entrypoint: /bin/true 版本:“2” 服务: 网状物: 重新启动:始终 生成:。 容器名称:meanjs 端口: - "3000:3000" - "5858:5858" - "8080:8080" - "35729:35729" 环境: -节点_ENV=开发 -DB_1_端口_27017_TCP_地址=DB 取决于: -分贝 卷从: -网络数据 网络数据: 生成:。 入口点:/bin/true 卷数: -./:/opt/mean.js -/opt/mean.js/node_模块 -/opt/mean.js/public -/opt/mean.js/uploads db: 图片:mongo:3.2 重新启动:始终 端口: - "27017:27017" 卷从: -数据库数据 数据库数据: 图片:mongo:3.2 卷数: -/data/db -/var/lib/mongodb -/var/log/mongodb 入口点:/bin/true
这是Docker compose的旧版本。这样做的原因是启动一个容器,该容器创建卷,然后退出

下面的代码启动一个容器并存在

  db-data:
    image: mongo:3.2
    volumes:
      - /data/db
      - /var/lib/mongodb
      - /var/log/mongodb
    entrypoint: /bin/true
在该容器中创建这些卷路径

      - /data/db
      - /var/lib/mongodb
      - /var/log/mongodb
然后mongo使用
中的
volumes\u将数据存储在此容器中

  db:
    image: mongo:3.2
    restart: always
    ports:
     - "27017:27017"
    volumes_from:
      - db-data
来自
卷在Compose 3.X中没有被弃用,不应使用。相反,您应该使用匿名卷的命名名称

因此,组合将更改为如下所示

匿名卷

version: '3.3'
....
  db:
    image: mongo:3.2
    restart: always
    ports:
     - "27017:27017"
    volumes:
      - /data/db
      - /var/lib/mongodb
      - /var/log/mongodb
version: '3.3'
....
  db:
    image: mongo:3.2
    restart: always
    ports:
     - "27017:27017"
    volumes:
      - mongodata:/data/db
      - mongodata:/var/lib/mongodb
      - mongodata:/var/log/mongodb
volumes:
  mongodata: {}
命名卷

version: '3.3'
....
  db:
    image: mongo:3.2
    restart: always
    ports:
     - "27017:27017"
    volumes:
      - /data/db
      - /var/lib/mongodb
      - /var/log/mongodb
version: '3.3'
....
  db:
    image: mongo:3.2
    restart: always
    ports:
     - "27017:27017"
    volumes:
      - mongodata:/data/db
      - mongodata:/var/lib/mongodb
      - mongodata:/var/log/mongodb
volumes:
  mongodata: {}

谢谢@Tarun Lalwani,但我看到版本2也支持您在版本3示例中提到的卷方法,为什么不在版本3中使用这种直接方式?因为这两种功能都是有效的。这是一个选择的问题。但是,有时来自
卷会非常有用。就像在on case中一样,我们曾经有一个带有主机映射卷的应用程序容器。我们将使用此容器中的
volumes\u运行另一个容器,进行一些构建,它将自动将我们的文件放置在另一个容器中。这有助于我们避免14-15个装载条目在两侧重复。不是版本“3”不允许这样。因此,根据您的思维过程和方法,您可以使用
volumes
或Tarun中的
volumes\u,谢谢您的详细解释,这非常有用。@PageNotFind如果您认为某个答案解决了您的问题,您可以通过单击答案分数下的复选标记将其标记为已接受。这样其他人就知道问题已经解决了。有关它的更多信息,请参阅。