我已经在此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
答案 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
...
不幸的是,您还不能从撰写文件中创建模板化配置(尚未),但这并不是真正的问题。