docker,获取容器名称,而不是nodejs中的容器ID

时间:2019-10-04 07:57:39

标签: node.js docker

我已经在此url上看到了答案,但实际上它是在返回容器ID而不是容器名称。

URL中的代码

const os = require('os');
console.log( os.hostname() ); 

在docker中,容器ID是一个长字符串,看起来像4e600c35e164...

而容器名称是为实例customer赋予此机器的有意义的名称,这就是我试图在nodejs中获得的名称。

docker-compose

customerservice:
    image: node:10
    container_name: customer
    command: bash -c "npm install && npm install nodemon -g && nodemon --exec npm start"
    ports:
      - 3000:3000

1 个答案:

答案 0 :(得分:1)

我认为,除非将主机的docker.sock文件绑定到容器中,否则您无法执行此操作,这使您可以运行docker命令或从容器内部联系docker的API。例如,请参见this。请注意,它要求您在容器中安装docker,并且存在安全隐患。不是一个很好的选择。


一种替代方法是,使用docker-compose.yaml中的environment键,将环境变量简单地添加到容器中(并将其手动设置为所需的任意值)。


最后,如果您可以修改自己的撰写文件,则可以使用最新功能:模板化docker configs。这个想法是,配置是可以在容器中访问的文件。它可以被模板化,例如看起来像

{{ .Name }}

,将其替换为容器的名称(尝试运行docker container inspect <container_name>来查看此Name。您可以使用

创建一次此配置
docker config create --template-driver golang <config_name> <path/to/file>

,然后在每个单独的容器中使用它,方法是在撰写文件的根目录中添加一个指向外部配置的configs:部分,然后将其链接到您的容器(请注意撰写文件的版本,我想您至少需要3.7):

# docker-compose.yaml
version: '3.7'

configs:
  <config_alias_inside_this_file>:
    external: true
    name: <config_name>

services:
  <service_name>:
    configs:
      - source: <config_alias_inside_this_file>
        target: <path/inside/container>
        # uid: '1000'  # You can set file mode, owner uid and group gid
        # gid: '1000'  # here if you need to, check the "long syntax" subsection
        # mode: 0644   # at https://docs.docker.com/compose/compose-file/#configs
    ...

不幸的是,您还不能从撰写文件中创建模板化配置(尚未),但这并不是真正的问题。