首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Docker

关于 Docker 环境变量设置

  •  
  •   Mrkon · 35 天前 · 1852 次点击
    这是一个创建于 35 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了使得 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" 
    

    请问有什么办法解决该问题吗?

    10 回复  |  直到 2019-10-31 18:07:07 +08:00
        1
    anubu   35 天前   ♥ 1
    宿主机上的 mysql 只能监听 127.0.0.1 吗?如果不是,mysql 改为监听宿主机 ip,容器直接连接宿主机 ip 最简单。如果是,按照贴出的资料,容器直接使用主机网络的方式最简单;如果非要使用桥接网络,首先 mysql 要监听网桥上宿主端 ip,其次容器里访问这个 ip 来连接到 mysql,问题中提到的环境变量就是指定这个 ip。如果在固定的宿主机上启动容器,查看这个 ip 后手动配置即可,不需要环境变量。
        2
    joyme   35 天前   ♥ 1
    容器内部不是可以访问宿主机的网络吗?为什么不能访问宿主机的 mysql 呢?

    你的返回宿主机 ip 是因为你没有在容器里面执行指令,不要用&&符号,类似于下面的语法

    ```
    docker run busybox echo "shell"
    ```
        3
    Trim21   35 天前 via Android   ♥ 1
    你要写个 entrypoint.sh 然后在里面用那行代码设置环境变量,不是用 docker 命令设置
        4
    Mrkon   35 天前
    @anubu 是的,直接指定宿主机 ip 是最简单的.但是我想探究一下宿主机发生改变的情况.同时 fix linux use host.docker.internal.为啥还没有 merge....
        5
    Mrkon   35 天前
    @joyme 明白了,thanks
        6
    Mrkon   35 天前
    @Trim21 相当于在 dockerfile 中添加 ENTRYPOINT ["./entrypoint.sh"] 吗?
        7
    Trim21   35 天前 via Android
    @Mrkon 对,而且脚本最后要再加一个 exec 命令来运行 cmd
        8
    anubu   35 天前
    @Mrkon 追求更通用的写法,就是像 @Trim21 说的那样写启动脚本。因为这个变量不是在 Dockerfile 或宿主中执行的命令获取的,而是要在容器创建后执行命令获取的。
        9
    Mrkon   35 天前
    @Trim21 加 exec 命令运行 cmd 是指? 我直接使用 export REDIS_HOST=redis 就可以了啊.
        10
    Mrkon   35 天前
    @anubu @Trim21 清楚了.这些命令应该放在生成容器后.哈哈,谢谢.
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3947 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 07:02 · PVG 15:02 · LAX 23:02 · JFK 02:02
    ♥ Do have faith in what you're doing.