我的Dockerfile中有一行:
&& echo "xdebug.remote_host=192.168.0.216" >> /usr/local/etc/php/conf.d/xdebug.ini`
我想让IP动态化。我如何获得主机IP?
答案 0 :(得分:2)
您需要使用build-time variables(-build-arg)。
此标志允许您传递在Dockerfile的RUN指令中像常规环境变量一样访问的构建时变量。
因此,Dockerfile
被修改为:
ARG IP_ADDRESS
RUN ... && echo "xdebug.remote_host=$IP_ADDRESS" >> /usr/local/etc/php/conf.d/xdebug.ini`
您只需在构建图像时定义构建时变量IP_ADDRESS
:
$ docker build --build-arg IP_ADDRESS=<IP_ADDRESS> .
如果您使用docker-compose
:
1。使用以下内容创建文件.env
:
IP_ADDRESS="<IP_ADDRESS>"
你可以每次都这样(例如Linux机器):
IP_ADDRESS=$(ip a | grep <interface> | grep inet | awk '{print $2}' | awk -F'/' '{print $1}')
echo "IP_ADDRESS=$IP_ADDRESS" > .env
2。使用以下docker-compose.yaml
构建您的图片:
version: '3'
services:
myservice:
build:
context: .
args:
IP_ADDRESS: ${IP_ADDRESS}
3. 建立上图:
docker-compose build
答案 1 :(得分:2)
没有简单的内置方式来获取Docker主机IP(除非您使用的是Docker for Mac)
最好不要在构建时设置Docker主机IP,否则图像将与其构建的主机绑定,并且在其他任何地方都无法工作。
ENTRYPOINT
可用于根据环境变量进行配置设置,然后将所有命令传递给容器:
#!/bin/sh
if [ -n "$IP_ADDRESS" ]; then
echo "xdebug.remote_host=$IP_ADDRESS" >> /usr/local/etc/php/conf.d/xdebug.ini
else
echo "No environment variable IP_ADDRESS set for xdebug"
fi
exec "$@"
然后运行:
docker run -e IP_ADDRESS=192.168.51.5 me/app-debug
在Docker for Mac 17.12+上,您可以使用主机名docker.for.mac.host.internal
另一种选择是为xdebug设置xdebug.remote_connect_back = 1
so you don't need a specific remote_host
。
Nicolay的answer covers the build time setup。