Docker link 容器 - 未显示环境变量
Docker link container - environment variables not being displayed
您好,我正在尝试 link 我的容器遵循本指南:
https://docs.docker.com/userguide/dockerlinks/
我运行docker run -d --name mongodb devops-mongodb
那我运行docker run -d -P --name rest-api --link mongodb devops-rest-api
到 link 我的 mongodb 容器到 rest-api 容器。
然后文档告诉我这样做是为了查看环境变量:
docker run --rm --name rest-api2 --link db:db devops-rest-api env
但是,它不会像文档中那样打印出环境变量。
我刚刚从我的 Spring 引导应用程序中获取 STDOUT。
我做错了什么?
您需要哪些环境变量?如果您不设置任何非将显示。如果您在此处 post 您的 dockerfile 将会有所帮助。我想你想要做的是从你的休息 api 访问 mongo,对吧?然后只需在您的 rest-api 配置中将 mongodb 定义为 mongo 的主机名,它应该可以工作。顺便说一句:在第二次调用中你有一个错误,因为你没有指定 mongodb 而是 --link db:db。 – hrrgttnchml 6 小时前
编辑 1:@hrrgttnchml,我期待这些环境变量,直接来自文档:
DB_PORT
DB_PORT_5432_TCP
DB_PORT_5432_TCP_PROTO
DB_PORT_5432_TCP_PORT
DB_PORT_5432_TCP_ADDR
我认为您不必使用 -e、-env 标志创建环境变量。
根据文档,当您 link 两个容器时,Docker 会自动创建它们:
Docker creates several environment variables when you link containers. Docker automatically creates environment variables in the target container based on the --link parameters. It will also expose all environment variables originating from Docker from the source container. These include variables from:
the ENV commands in the source container’s Dockerfile
the -e, --env and --env-file options on the docker run command when the source container is started
不过,我可能是错的。
这是我的休息-api dockerfile: http://pastebin.com/3Ktbbr9n
MongoDB 码头文件:http://pastebin.com/iqyKm5UK
两个应用程序都可以在容器为 运行 时启动。只是不知道如何 link 他们。
是的,我想让其余的-api与mongodb数据库通信。
因为我运行正在spring-引导其余的-api,我可以在我的application.properties文件中指定我的mongo数据库服务器如:
spring.data.mongodb.host=192.168.99.100
spring.data.mongodb.port=27017
所以你是要我替换 192.168.99.100
with mongodb
?
我也在 运行在 windows 上连接 oracle box 虚拟机,所以 VM 本身有一个 IP 地址,当连接到容器时,我必须使用机器的 IP 而不是localhost,所以这就是 192.168.99.100 的来源。正确吗?
编辑 2: 我已经得到其余的-api 来与 mongodb 进行通信而无需 容器 linking 只需使用 VM 的地址以及 Docker 文件中公开的端口。因此,对于 mongodb,它将是 192.168.99.100:27017,而对于其余的 api,它将是 192.168.99.100:8080。
但是,这是不切实际的,因为ip地址被硬编码到rest-api class本身。所以其他人将无法 运行 他机器上容器中的图像,因为 IP 地址不匹配。
现在显然解决方法是使用容器 linking 作为解决方案,因为主机和端口在 /etc/hosts 文件中更改时会自动更新,这使我们回到最初的问题如何让容器 linking 工作。
编辑 3: 将 mongodb
指定为 rest-api 中的主机名确实有效,但仅当传入数据库的别名时link 例如:--link mongodb
devops-rest-api
有可能 ENTRYPOINT
吗? docker run
上的任何命令行参数都将传递到入口点。不要指定命令,而是尝试使用 --entrypoint env
.
覆盖
您好,我正在尝试 link 我的容器遵循本指南:
https://docs.docker.com/userguide/dockerlinks/
我运行docker run -d --name mongodb devops-mongodb
那我运行docker run -d -P --name rest-api --link mongodb devops-rest-api
到 link 我的 mongodb 容器到 rest-api 容器。
然后文档告诉我这样做是为了查看环境变量:
docker run --rm --name rest-api2 --link db:db devops-rest-api env
但是,它不会像文档中那样打印出环境变量。
我刚刚从我的 Spring 引导应用程序中获取 STDOUT。
我做错了什么?
您需要哪些环境变量?如果您不设置任何非将显示。如果您在此处 post 您的 dockerfile 将会有所帮助。我想你想要做的是从你的休息 api 访问 mongo,对吧?然后只需在您的 rest-api 配置中将 mongodb 定义为 mongo 的主机名,它应该可以工作。顺便说一句:在第二次调用中你有一个错误,因为你没有指定 mongodb 而是 --link db:db。 – hrrgttnchml 6 小时前
编辑 1:@hrrgttnchml,我期待这些环境变量,直接来自文档:
DB_PORT
DB_PORT_5432_TCP
DB_PORT_5432_TCP_PROTO
DB_PORT_5432_TCP_PORT
DB_PORT_5432_TCP_ADDR
我认为您不必使用 -e、-env 标志创建环境变量。 根据文档,当您 link 两个容器时,Docker 会自动创建它们:
Docker creates several environment variables when you link containers. Docker automatically creates environment variables in the target container based on the --link parameters. It will also expose all environment variables originating from Docker from the source container. These include variables from:
the ENV commands in the source container’s Dockerfile
the -e, --env and --env-file options on the docker run command when the source container is started
不过,我可能是错的。
这是我的休息-api dockerfile: http://pastebin.com/3Ktbbr9n
MongoDB 码头文件:http://pastebin.com/iqyKm5UK
两个应用程序都可以在容器为 运行 时启动。只是不知道如何 link 他们。
是的,我想让其余的-api与mongodb数据库通信。
因为我运行正在spring-引导其余的-api,我可以在我的application.properties文件中指定我的mongo数据库服务器如:
spring.data.mongodb.host=192.168.99.100
spring.data.mongodb.port=27017
所以你是要我替换 192.168.99.100
with mongodb
?
我也在 运行在 windows 上连接 oracle box 虚拟机,所以 VM 本身有一个 IP 地址,当连接到容器时,我必须使用机器的 IP 而不是localhost,所以这就是 192.168.99.100 的来源。正确吗?
编辑 2: 我已经得到其余的-api 来与 mongodb 进行通信而无需 容器 linking 只需使用 VM 的地址以及 Docker 文件中公开的端口。因此,对于 mongodb,它将是 192.168.99.100:27017,而对于其余的 api,它将是 192.168.99.100:8080。
但是,这是不切实际的,因为ip地址被硬编码到rest-api class本身。所以其他人将无法 运行 他机器上容器中的图像,因为 IP 地址不匹配。
现在显然解决方法是使用容器 linking 作为解决方案,因为主机和端口在 /etc/hosts 文件中更改时会自动更新,这使我们回到最初的问题如何让容器 linking 工作。
编辑 3: 将 mongodb
指定为 rest-api 中的主机名确实有效,但仅当传入数据库的别名时link 例如:--link mongodb
devops-rest-api
有可能 ENTRYPOINT
吗? docker run
上的任何命令行参数都将传递到入口点。不要指定命令,而是尝试使用 --entrypoint env
.