docker-compose忽略DOCKER_HOST

时间:2018-02-25 12:44:08

标签: bash docker docker-compose windows-subsystem-for-linux bash-on-windows

我试图在Bash for Windows(WSL)上运行3个Docker镜像,MySQL,Redis和我的一个项目。

为此,我必须连接到在Windows上运行的Docker引擎,特别是在tcp://locahost:2375上。我已将以下行添加到.bashrc

export DOCKER_HOST=tcp://127.0.0.1:2375

我可以成功运行docker docker ps命令,例如docker run hello-worldcd,但只要我sudo docker-compose up --build进入我的项目目录并运行 -H加载图像并旋转容器我收到错误:

  

错误:无法连接到http + docker:// localunixsocket的Docker守护程序 - 它正在运行吗?

     

如果它位于非标准位置,请使用DOCKER_HOST环境变量指定URL。

我知道如果我使用docker-compose参数我可以提供地址,但我宁愿找到更永久的解决方案。出于某种原因,DOCKER_HOST似乎忽略了$d1 = new DateTime($time1); $d2 = new DateTime($time2); $diff = $d1->diff($d2); 环境变量,我无法弄清楚为什么......

2 个答案:

答案 0 :(得分:4)

您的问题是sudo。它是一个完全不同于shell的程序,除非您明确指出,否则不会传输导出的环境。您可以在/etc/sudoers(或/etc/sudoers.d/docker)中添加以下行:

Defaults env_keep += DOCKER_HOST

或者您可以直接将其传递给命令行:

sudo DOCKER_HOST=$DOCKER_HOST docker-compose up --build 

答案 1 :(得分:0)

通过设置import React, { Fragment, useState, useContext, useEffect } from 'react'; import { SearchBar, IconContainer } from '../../styles/componentStyles/SearchBox/SearchBox'; import SearchIcon from './SearchIcon'; import SearchResult from './SearchResult'; import GenreFancyItemContext from '../../Context/genreFancyITem/GenreFancyItemContext'; export default function SearchBox() { const genreFancyItemContext = useContext(GenreFancyItemContext); const { getSearchResults, searchResults } = genreFancyItemContext; const [searchText, setSearchText] = useState(''); const onChange = e => { console.log('On change executes'); var text = e.target.value; setSearchText(text); getSearchResults(searchText); console.log(searchResults); }; return ( <Fragment> <SearchBar type="text" name="searchSting" placeholder=" Search Fancyitem..." onChange={onChange} value={searchText} /> <SearchResult /> </Fragment> ); } ,您告诉命令行中的每次docker运行都使用 http api ,而不是默认值-在本地主机上使用 socket

默认情况下 http api 未打开

DOCKER_HOST

您可以在本地主机上的http api上为$ sudo cat /lib/systemd/system/docker.service | grep ExecStart ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 添加tern 但通常您想通过-H tcp://127.0.0.1:2375 (仅在适当的防火墙上进行操作)在远程服务器的api上进行培训

因此您需要在-H tcp://0.0.0.0:2375中更改为下一行

/lib/systemd/system/docker.service