Node.js docker,在nodejs中获取容器名称,而不是容器id

Node.js docker,在nodejs中获取容器名称,而不是容器id,node.js,docker,Node.js,Docker,我已经看到了答案,但它实际上返回的是容器id而不是容器名称 来自URL的代码 const os = require('os'); console.log( os.hostname() ); 在docker中,容器id是一个长字符串,看起来像4e600c35e164… 而容器名称是一个有意义的名称,例如customer,这正是我在nodejs中试图得到的 docker compose customerservice: image: node:10 container_name:

我已经看到了答案,但它实际上返回的是容器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

我认为,如果不将主机的
docker.sock
文件绑定到容器中,您就无法执行此操作,该容器允许您运行docker命令或从容器内部联系docker的API。例如,见。请注意,它要求您在容器中安装docker,并且会带来安全风险。这不是一个很好的选择


另一种方法是使用
docker compose.yaml
中的键将环境变量添加到容器中(并手动将其设置为您想要的任何值)


最后,如果您对修改compose文件没有意见,您可以使用最近的特性:模板化docker配置。其思想是,配置是一个可以在容器中访问的文件。它可以被模板化,例如,它可以看起来像

{{ .Name }}
它将被容器的名称替换(尝试运行
docker container inspect
查看此
name
。您可以使用

docker config create --template-driver golang <config_name> <path/to/file>

不幸的是,您还不能从compose文件中创建模板配置,但这并不是一个真正的问题。

您可以在compose中传递
hostname:customer
,附加时在cmd行上显示什么?
process.env.hostname
返回相同的长字符串值
# 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
    ...