【问题标题】:Connect Docker-container by Unit-socket通过 Unit-socket 连接 Docker-container
【发布时间】:2020-05-12 06:34:06
【问题描述】:

我尝试通过 Unit-socket 将 Docker-container 与内部资源连接起来。

为此,我将以下命令添加到 Dockerfile:

 RUN -v /var/run/docker.sock:/var/run/postgresql/.s.PGSQL.5432

但在 docker build 阶段我收到:/bin/sh: 非法选项 - 错误:服务“webapp”构建失败:命令“/bin/sh -c -v /var/run/docker.sock:/var/run/postgresql/.s.PGSQL.5432”返回非零代码: 2

我做错了什么?

【问题讨论】:

    标签: docker sockets dockerfile


    【解决方案1】:

    Dockerfile 中的RUN 指令用于在构建期间在容器内运行命令,而不是运行容器。请参考documentation

    要使容器内的 Unix 套接字可用,请在启动容器时指定 bind mount

    docker run -v /var/run/postgresql/.s.PGSQL.5432:/var/run/postgresql/.s.PGSQL.5432 yourapp:latest
    

    这将使您主机上的/var/run/postgresql/.s.PGSQL.5432 套接字在容器内可用。

    您还可以指定不同的主机和容器路径:

    docker run -v /var/run/postgresql/.s.PGSQL.5432:/tmp/postgresql yourapp:latest
    

    注意:/var/run/docker.sock 用于与 Docker 通信 守护进程。请小心,因为对 Docker 守护进程的访问会提供对您机器的 root 访问权限。

    【讨论】:

    • 你能帮我解决这个问题的另一个方面吗?我是否理解正确,我必须在机器上运行此命令,其中数据库为 PGSQL.5432 。安装了吗?我构建了我的容器,通过 docker-compose 构建并推送到我的本地机器上,然后它使用数据库(使用 unix-socket)迁移到远程服务器上
    • 很高兴为您提供帮助!是的,您必须在与数据库相同的机器上运行容器。有很多方法可以做到这一点:要么在本地构建并将图像传输到远程主机,要么配置对 Docker 守护程序的远程访问。在这里查看答案:serverfault.com/q/809460
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    相关资源
    最近更新 更多