Node.js docker,在nodejs中获取容器名称,而不是容器id
我已经看到了答案,但它实际上返回的是容器id而不是容器名称 来自URL的代码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:
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
...