web-dev-qa-db-ja.com

UbuntuウィンドウのbashでDockerデーモンに接続できない

Docker、docker-compose、docker-machineをインストールできます

ただし、実行しようとすると

root@DESKTOP-51NFMIM:~# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

この問題を解決するための提案はありますか?

25
zsbappa

この投稿で解決策を見つけました: https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/

DockerはCLIが接続できるTCPエンドポイントを公開できるため、実際には別のマシンのエンジンに対してdockerを実行するのは非常に簡単です。

このTCPエンドポイントはデフォルトでオフになっています。有効にするには、タスクバーのDockerアイコンを右クリックして[設定]を選択し、[TLSを使用せずにtcp:// localhost:2375でデーモンを公開する]の横のボックスをオンにします。

これが完了したら、次のように、Bashで実行されている存在しないエンジンではなく、Windowsで実行されているエンジンに接続するようにBashでCLIに指示するだけです。

$ docker -H tcp://0.0.0.0:2375 images

これを永続化するには、2つの方法があります。上記のコマンドのエイリアスを追加するか、ホストエンジンを見つける場所をDockerに指示する環境変数をエクスポートします(注:必ず単一のアポストロフィを使用してください)。

$ echo "export DOCKER_Host='tcp://0.0.0.0:2375'" >> ~/.bashrc
$ source ~/.bashrc

現在、Bashからdockerコマンドを実行すると、本来の動作と同じように機能します。

$ docker run hello-world

成功した応答:

Hello from Docker!This message shows that your installation appears to be working correctly.
22
Rami Sarieddine

注: WSL(Linux用Windowsサブシステム) からUbuntuを使用している場合、Dockerサーバー(デーモン)ではなく、Dockerクライアントが機能していることを理解してください。

Microsoft/WSL issue 2114 および このスレッド を参照してください。

サーバーの場合は、 Docker for Windows とそのHyper-V VMのみを使用する必要があります。

次に、 Microsoft/WSL issue 2102 を追加:

DOCKER_CERT_PATH環境変数(eval $(docker-machine.exe env --Shell bash)の実行から取得)を "C:\C:\Users\mmarchini\.docker\machine\machines\default"から "/mnt/c/Users/mmarchini/.docker/machine/machines/default/"に変更することにより、WSL内からTLSを機能させることができました。
少なくともdockerビルドは現在動作しているようです。後でdocker-composeを使用してみます。

このスクリプト (from Matheus Marchini )を参照して、正しい設定でdocker-machine bashを起動します。

#!/usr/bin/env python3

from subprocess import run, PIPE

completed_process = run(["docker-machine.exe", "env", "--Shell", "bash"], stdout=PIPE)

docker_env = completed_process.stdout.decode("ascii")

for line in docker_env.split("\n"):
    if "DOCKER_CERT_PATH" in line:
        env_var, path, _ = line.split('"')
        path = path.replace("\\", "/")
        drive, path = path.split(":", 1)
        path = "/mnt/{}{}".format(drive.lower(), path)
        line = '{}"{}"'.format(env_var, path)
print(line)
5
VonC

Windows 10バージョン1803以降を実行している場合、Dockerクライアントとサーバーをインストールして、Docker Desktop for Windowsなしで純粋にWSLで実行できます。次のWSLで動作しています:

OS: Ubuntu 18.04 bionic [Ubuntu on Windows 10]
Kernel: x86_64 Linux 4.4.0-17763-Microsoft

同じ instructions に従ってUbuntuにインストールしますが、インストールする特定のバージョンを選択してください。現在、バージョン18.06.1〜ce〜3-0〜ubuntuは正常に動作しますが、それ以降のバージョン5まで: 18.09.6〜3-0〜ubuntu-bionicには、コンテナの起動に関する問題があります。次のコマンドは、最新の作業バージョンをインストールします。

apt-get install docker-ce=18.06.1~ce~3-0~ubuntu

インストール後にWSLでDockerサーバーを実行するには、開いているすべてのターミナルを閉じて、管理者として新しいUbuntuターミナルを起動します(つまり、Ubuntuショートカットを右クリックし、「管理者として実行」をクリックします)。最後に、次のコマンドを実行します。

Sudo cgroupfs-mount
Sudo service docker start

Sudo service docker startは、Windowsを再起動するたびに実行する必要があります。ただし、それを避けたい場合は、 here に記載されている手順に従って、タスクスケジューラとシェルスクリプトを使用して自動化できます。

以下を使用して、すべてが機能していることをテストします。

docker run hello-world

リファレンス: https://medium.com/faun/docker-running-seamlessly-in-windows-subsystem-linux-6ef8412377aa

4
Stephan

私にとっては、これはWindows用のWSLで機能しました:

  • 1>移動:Windowsの機能をオンまたはオフにします
  • 2>「Hyper-V」の選択を解除して再起動し、
  • 3> [Windowsの機能の有効化または無効化]に再度進み、
  • 4>もう一度「Hyper-V」を選択します
  • 最後に再起動します。その後、ドッカーは再び到達可能になりました。

dockerデスクトップをWindows用にインストールし、TLSを使用せずにtcp:// localhost:2375に[設定]-> [一般]-> [デーモンを公開]をオンにしていると仮定します