4

一段时间以来,我们一直在使用 docker 容器进行开发和部署,它就像一个魅力。到目前为止,这两种配置都是相同的,并且使用 fig 开发人员的生活也更加轻松。

随着我们在节点开发循环中越来越多地使用它,现在我们面临着在开发时需要一些额外的工具(检查器、配置文件等),这些东西显然在生产容器中不需要。node-inspector 的另一个亮点是:它需要公开一个端口以连接到浏览器,以便查看工具本身。

这是我们的 fig.yml 文件:

indexer:
  build: .
  volumes:
   - .:/src
  links:
   - db
   - amqp
   - search
amqp:
  ports:
   - "5672:5672"
   - "15672:15672"
  image: mikaelhg/docker-rabbitmq
db:
  ports:
   - "3306:3306"
  image: tutum/mysql:5.6
search:
  ports:
   - "9002:9002"
   - "9300:9300"
  image: dockerfile/elasticsearch

“Indexer”是我们的应用容器,可以多次启动,将其配置更改为:

indexer:
  ports:
    - "8080:8080"
  build: .
  volumes:
   - .:/src
  links:
   - db
   - amqp
   - search

隐藏了一个小问题:当我们启动其中许多时,映射端口显然成为一个问题,实际上没有检查员可用。

我的第一个 getto 解决方案只是创建一个新的“indexer-dev”容器以启动仅用于调试目的,但它不足,因为我们fig up在 shell 上运行一个方便的只是为了启动所有内容,然后fig run indexer dev bash在另一个中运行另一个用于我们的调试目的。所以我现在正在做的只是fig up手动启动带有需要转发端口的容器: docker run -i -t -p 8080:8080 indexer:latest

以更自动的方式拥有它的最佳方式是什么?例如开发人员可以通过无花果继续启动容器并选择哪个实例可能有或可能没有导出端口?

谢谢你的任何建议。

干杯卢西奥

4

1 回答 1

7

您可以在调用时传入环境变量fig upfig run

采取以下无花果配置文件:

test:
  image: base
  command: env
  environment:
    - DEBUG

它定义了一个名为的容器test,它将打印出环境变量。请注意,在本environment节中,我们定义了一个DEBUG没有值的环境变量。

当使用fig upor运行时,fig run它将DEBUG定义没有值的环境变量

$ fig run test
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=5412e54ea3de
TERM=xterm
DEBUG=
HOME=/root

但您可以为环境变量注入一个新值,DEBUG如下所示:

$ DEBUG=true fig run test
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=9150d89c57a2
TERM=xterm
DEBUG=true
HOME=/root

这允许您传递秘密或让您的容器根据某些环境变量表现不同。

于 2014-10-05T18:35:33.030 回答