web-dev-qa-db-ja.com

docker-composeからdockerに接続できません

私はMac OS 10.8.5にdocker-machine 0.1.0とdocker-compose 1.1.0をインストールしました。
Docker-machineは正常に稼働しており、docker-machine sshで接続できます。

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    *        virtualbox   Running   tcp://192.168.99.100:2376   

しかしdocker-composeから接続することはできません。

$ docker-compose up

Http + unix://var/run/docker.sockでDockerデーモンに接続できませんでした - 実行中ですか?

標準以外の場所にある場合は、DOCKER_Host環境変数を使用してURLを指定してください。

私のDockerfileとdocker-compose.ymlがここにあります。

Dockerfile

FROM centos:centos7
DOCKER_Host tcp://192.168.99.100:2376

docker-compose.yml

web:
  build: .

どうして接続できないの?何か案は?

111
DIGITALSQUAD

Dockerマシンが稼働しています。しかし、Dockerマシンに接続するために何らかの環境をエクスポートする必要があります。デフォルトでは、docker CLIクライアントは、(エラーメッセージに示されているように)http+unix://var/run/docker.sockを使用してデーモンと通信しようとしています。

eval $(docker-machine env dev)を使用して正しい環境変数をエクスポートしてから、やり直してください。 docker-machine env devを実行して、エクスポートする環境変数を確認することもできます。そのうちの1つがDOCKER_Hostであることに注意してください。エラーメッセージが示すように、設定する必要があるかもしれません。

77
Andy Shinn

私にとっての簡単な解決策:Sudo docker-compose up


UPDATE 2016-3-14:dockerインストールプロセス(またはdocker-compose?)のある時点で、ユーザー名を "docker"グループに追加する提案と例があります。これにより、すべてのdockerコマンドの前に "Sudo"を入力する必要がなくなります。

~ > docker run -it ubuntu /bin/bash
root@665d1ea76b8d:/# date
Mon Mar 14 23:43:36 UTC 2016
root@665d1ea76b8d:/# exit
exit
~ > 

Installコマンドの出力(dockerと2番目のインストールの両方のdocker-compose)を注意深く見ると、必要なステップがわかります。それはまたここに文書化されています: https://subosito.com/posts/docker-tips/

数独ですか?いいえ、

コマンドを発行するたびにSudo dockerと入力するのはうんざり?ええ、それに対処する方法があります。当然dockerはrootユーザーを必要としますが、docker操作のためにrootと同等のグループを与えることができます。

Dockerというグループを作成してから、そのグループに目的のユーザーを追加できます。 dockerサービスを再開した後、ユーザーはdocker操作をするたびにSudoと入力する必要はありません。シェルコマンドではどのように見えますか?ルートとして、ここに行きます:

> Sudo groupadd docker
> Sudo gpasswd -a username docker
> Sudo service docker restart 

完了しました。

アップデート2017-3-9

Dockerのインストール 説明はここで更新されました。

Linuxのインストール後の手順

このセクションでは、Dockerと連携して動作するようにLinuxホストを構成するためのオプションの手順について説明します。

root以外のユーザーとしてDockerを管理します

DockerデーモンはTCPポートの代わりにUnixソケットにバインドします。デフォルトでは、Unixソケットはrootユーザによって所有されており、他のユーザはSudoを使用してのみアクセスできます。 dockerデーモンは常にrootユーザーとして実行されます。

Dockerコマンドを使用するときにSudoを使用したくない場合は、dockerという名前のUnixグループを作成し、それにユーザーを追加します。 dockerデーモンが起動すると、Unixソケットの所有権がdockerグループによって読み取り/書き込み可能になります。

Dockerグループを作成してユーザーを追加するには:

# 1. Create the docker group.
$ Sudo groupadd docker

# 2. Add your user to the docker group.
$ Sudo usermod -aG docker $USER

# 3. Log out and log back in so that your group membership is re-evaluated.

# 4. Verify that you can run docker commands without Sudo.
$ docker run hello-world

このコマンドはテストイメージをダウンロードしてコンテナ内で実行します。コンテナーが実行されると、通知メッセージを印刷して終了します。

140
Alan Thompson

Sudoを使用してdockerを起動した場合は、Sudoを指定してdocker-compose upを実行する必要があります。Sudo docker-compose up

16
Rohan Seth

デフォルトではdockerデーモンは常にrootユーザーとして実行されるので、Dockerコマンドの前にSudoを追加する必要があります。

Dockerコマンドを使用するときにSudoを使用したくない場合は、dockerという名前のUnixグループを作成し、それにユーザーを追加します。 dockerデーモンが起動すると、Unixソケットの所有権がdockerグループによって読み取り/書き込み可能になります。

Dockerグループを作成してユーザーを追加するには:

  1. 港湾労働者グループを作成します。

    $ Sudo groupadd docker

  2. ユーザーをdockerグループに追加します。

    $ Sudo usermod -aG docker $USER

  3. グループメンバーシップが再評価されるように、ログアウトして再度ログインします。

  4. Sudoなしでコマンドをドッキングできることを確認してください。

    $ docker run hello-world

このコマンドはテストイメージをダウンロードしてコンテナ内で実行します。コンテナーが実行されると、通知メッセージを印刷して終了します。

上記の手順は Docker公式ドキュメント から来ています。

15
ndequeker

Sudo systemctl start docker - Dockerサービスを開始します。

その後Sudo docker-compose up

私はFedora 26を持っていて、私が最終的に Docker ComposeでFedora開発者のページに そして 入力したのと同じ問題を解決しよう)Fedora Developersのページ にDockerを追加しました。

おそらく、dockerサービスは、コミュニティから常時システムを起動してバックグラウンドで実行することを検討されていましたが、それほど明白ではなかったため、このような一般的な答えがないのは私が考える理由です。

Fedora Developersのページ にDockerを有効にしてシステムから起動する方法が書かれています。

Sudo systemctl enable docker

9
lyosha

Linuxを使用している場合、docker-machineはWindowsおよびMacコンピュータにのみデフォルトでインストールされるため、インストールされていない可能性があります。

もしそうなら、あなたがする必要があるでしょう: https://docs.docker.com/machine/install-machine/ インストールするための指示を見つけるためにあなたの使っているLinuxのバージョンでは。

インストール後、上記のことを試す前にdocker-compose upの実行を再試行してください。

これが誰かに役立つことを願っています。これは私のdevilboxをFedora 25にインストールするときにうまくいきました。

6
specialk1st

docker-machineを使用している場合は、env変数を使用して環境を有効にする必要があります。 docker-machineを使用していない場合は、Sudoを付けてコマンドを実行してください。

3
Md Ch

@ srfrnkからの返事は私のために働く。

私の状況では、私は次のdocker-compose.ymlファイルを持っていました:

  nginx:
    build:
      context: ./
      dockerfile: "./docker/nginx.staging/Dockerfile"
    depends_on:
      - scripts
    environment:
      NGINX_SERVER_NAME: "some.Host"
      NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
      NGINX_ERROR_LOG_LEVEL: debug
      NGINX_BACKEND_Host: scripts
      NGINX_SERVER_ROOT: /var/www/html
    volumes:
      - ./docker-runtime/drupal/files:/var/www/html/sites/default/files:rw
    ports:
      - 80:80

./docker-runtime所有者およびグループ - 他のファイルの所有者 - 私のユーザーの場合はrootです。 nginxをビルドしようとしたとき

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

./docker-runtime.dockerignoreに追加したところ、問題は解決しました。

3
Dima Storozhuk

誰がログをチェックした?

私の場合は/var/log/upstart/docker.logのエラーメッセージは次のとおりです。

Listening for HTTP on unix (/var/run/docker.sock) 
[graphdriver] using prior storage driver "aufs" 
Running modprobe bridge nf_nat failed with message: , error: exit status 1 
Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0" 

言及する価値があるので、私はvpnをオンにしました、それで$ Sudo service openvpn stop $ Sudo service docker restart $ docker-compose up|start $ Sudo service openvpn startが解決策でした。

2

私は同じ症状を抱えています。

docker-compose builddocker psが動いている間にだけ起こったことを比較するだけです。 2.x3.xのバージョンで起こりました。 dockerサービスを再起動してからマシンを再起動してください。docker + docker-composeを再インストールしても問題ありません。

すべてを試しましたが、何も助けになりませんでした。

最後に、docker buildを使用してDockerfileを「手動で」作成してみました。

どうやら私はDockerコンテキスト内のファイル/フォルダにパーミッションの問題がありました。ビルドを開始するときにコンテキストを読み取ろうとしていましたが、適切なエラーメッセージが表示されて失敗しました。しかし、このエラーメッセージできませんdocker-composeのみを表示するCouldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?に伝播します

このソリューションでは、ビルドには不要であるため、ファイル/フォルダを.dockerignoreファイルに追加するだけであることがわかりました。別の解決策はchownまたはchmodにすることでした。

とにかく、これはdockerとは全く関係のない同じ問題に遭遇し、誤解を招くようなエラーメッセージが表示されるのを助けるかもしれません。

2
srfrnk

デーモンを開始するために最初に必要なdockerdまたはSudo dockerdifを実行してみてください。 dockerdSudoで起動する場合は、Sudodocker-compose upを実行することもできます。それ以外の場合は問題ありません。

https://github.com/docker/compose/issues/4181 の実用的なソリューション

0
Gathua Kiragu

Dockerグループにユーザーを追加する以外に、Sudoを繰り返し入力しないようにするために、次のようにdockerコマンドのエイリアスを作成することもできます。

alias docker-compose="Sudo docker-compose"
alias docker="Sudo docker"
0
Shanu Gupta

私のセットアップには、このエラーの2つのケースがあります。

  • コンテナ内で統合テストを実行した後にrootユーザーによって作成された__pycache__ファイルは、docker(元の問題を伝えます)およびdocker-compose(dockerホストについてあいまいに伝えます)にアクセスできません。
  • microk8sは、停止するまでポートをブロックしました。
0
simno

docker-compose pullを実行中に - エラー以下になっていましたエラー:http + docker:// localhostでDockerデーモンに接続できませんでした - 実行中ですか?

ソリューション - Sudo service docker start

問題が解決しました

0
kumar

これを試して:

Sudo ln -s/usr/local/bin/docker-compose/usr/bin/docker-compose

0
Tarun Bhavnani

$ Sudo docker-compose up

上記の回答にあるように、group dockerに$ USERを追加するのと同じ手順に従いました。私のdockerインストールでdockerという名前のグループが自動的に作成されたので、私は新しいグループdockerを追加したくありませんでした。

Docker CEがインストールされ、実行されています。dockerグループは作成されますが、ユーザーは追加されません。Dockerコマンドを実行するにはSudoを使用する必要があります。他のオプションの設定手順。

しかしdocker-compose upを使ってもうまくいきませんでした。以前と同じエラーが発生しました。私の場合は(Ubuntu 18.10)Sudo docker-compose upで問題を解決しました。

ps:@アドバイスありがとうございます。

私にとっては、Dockerのアップグレードを開始し、途中でキャンセルしました。 Dockerが実行されていないことに気づきませんでした(実行されている場合、バッテリー残量、時間などによって、私のMacbookの上部のナビゲーションバーにアイコンが表示されます)。起動してアップグレードを完了すると、docker-compose upは再び機能しました。

0
Rock Lee