为了使得 docker 内部能访问到宿主机的 mysql,我采用了stackoverflow高赞的答案,但问题是我该如何导入如下环境变量呢?
export DOCKER_HOST_IP=$(route -n | awk '/UG[ \t]/{print $2}')
经过验证,失败的方法:
# 语法错误
ENV MYSQL_HOST=$(route -n | awk '/UG[ \t]/{print $2}')
# export won't persist across images.
RUN export REDIS_HOST=redis && echo "$REDIS_HOST"
# 返回的是宿主机的 ip
docker run -e REDIS_HOST=redis && echo "$REDIS_HOST"
请问有什么办法解决该问题吗?
1
anubu 2019-10-31 17:28:32 +08:00 1
宿主机上的 mysql 只能监听 127.0.0.1 吗?如果不是,mysql 改为监听宿主机 ip,容器直接连接宿主机 ip 最简单。如果是,按照贴出的资料,容器直接使用主机网络的方式最简单;如果非要使用桥接网络,首先 mysql 要监听网桥上宿主端 ip,其次容器里访问这个 ip 来连接到 mysql,问题中提到的环境变量就是指定这个 ip。如果在固定的宿主机上启动容器,查看这个 ip 后手动配置即可,不需要环境变量。
|
2
joyme 2019-10-31 17:30:13 +08:00 1
容器内部不是可以访问宿主机的网络吗?为什么不能访问宿主机的 mysql 呢?
你的返回宿主机 ip 是因为你没有在容器里面执行指令,不要用&&符号,类似于下面的语法 ``` docker run busybox echo "shell" ``` |
3
Trim21 2019-10-31 17:32:37 +08:00 via Android 1
你要写个 entrypoint.sh 然后在里面用那行代码设置环境变量,不是用 docker 命令设置
|
4
Mrkon OP @anubu 是的,直接指定宿主机 ip 是最简单的.但是我想探究一下宿主机发生改变的情况.同时 fix linux use host.docker.internal.为啥还没有 merge....
|
6
Mrkon OP @Trim21 相当于在 dockerfile 中添加 ENTRYPOINT ["./entrypoint.sh"] 吗?
|
8
anubu 2019-10-31 17:58:49 +08:00
|