私は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: .
どうして接続できないの?何か案は?
Dockerマシンが稼働しています。しかし、Dockerマシンに接続するために何らかの環境をエクスポートする必要があります。デフォルトでは、docker
CLIクライアントは、(エラーメッセージに示されているように)http+unix://var/run/docker.sock
を使用してデーモンと通信しようとしています。
eval $(docker-machine env dev)
を使用して正しい環境変数をエクスポートしてから、やり直してください。 docker-machine env dev
を実行して、エクスポートする環境変数を確認することもできます。そのうちの1つがDOCKER_Host
であることに注意してください。エラーメッセージが示すように、設定する必要があるかもしれません。
私にとっての簡単な解決策: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
完了しました。
このセクションでは、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
このコマンドはテストイメージをダウンロードしてコンテナ内で実行します。コンテナーが実行されると、通知メッセージを印刷して終了します。
Sudo
を使用してdockerを起動した場合は、Sudo
を指定してdocker-compose upを実行する必要があります。Sudo docker-compose up
デフォルトではdockerデーモンは常にrootユーザーとして実行されるので、Dockerコマンドの前にSudo
を追加する必要があります。
Dockerコマンドを使用するときにSudoを使用したくない場合は、dockerという名前のUnixグループを作成し、それにユーザーを追加します。 dockerデーモンが起動すると、Unixソケットの所有権がdockerグループによって読み取り/書き込み可能になります。
港湾労働者グループを作成します。
$ Sudo groupadd docker
ユーザーをdockerグループに追加します。
$ Sudo usermod -aG docker $USER
グループメンバーシップが再評価されるように、ログアウトして再度ログインします。
Sudoなしでコマンドをドッキングできることを確認してください。
$ docker run hello-world
このコマンドはテストイメージをダウンロードしてコンテナ内で実行します。コンテナーが実行されると、通知メッセージを印刷して終了します。
上記の手順は Docker公式ドキュメント から来ています。
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
Linuxを使用している場合、docker-machine
はWindowsおよびMacコンピュータにのみデフォルトでインストールされるため、インストールされていない可能性があります。
もしそうなら、あなたがする必要があるでしょう: https://docs.docker.com/machine/install-machine/ インストールするための指示を見つけるためにあなたの使っているLinuxのバージョンでは。
インストール後、上記のことを試す前にdocker-compose up
の実行を再試行してください。
これが誰かに役立つことを願っています。これは私のdevilboxをFedora 25にインストールするときにうまくいきました。
docker-machineを使用している場合は、env変数を使用して環境を有効にする必要があります。 docker-machineを使用していない場合は、Sudoを付けてコマンドを実行してください。
@ 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
に追加したところ、問題は解決しました。
誰がログをチェックした?
私の場合は/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
が解決策でした。
私は同じ症状を抱えています。
docker-compose build
docker ps
が動いている間にだけ起こったことを比較するだけです。 2.x
と3.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
とは全く関係のない同じ問題に遭遇し、誤解を招くようなエラーメッセージが表示されるのを助けるかもしれません。
デーモンを開始するために最初に必要なdockerd
またはSudo dockerd
ifを実行してみてください。 dockerd
をSudo
で起動する場合は、Sudo
でdocker-compose up
を実行することもできます。それ以外の場合は問題ありません。
https://github.com/docker/compose/issues/4181 の実用的なソリューション
Dockerグループにユーザーを追加する以外に、Sudo
を繰り返し入力しないようにするために、次のようにdocker
コマンドのエイリアスを作成することもできます。
alias docker-compose="Sudo docker-compose"
alias docker="Sudo docker"
私のセットアップには、このエラーの2つのケースがあります。
__pycache__
ファイルは、docker(元の問題を伝えます)およびdocker-compose(dockerホストについてあいまいに伝えます)にアクセスできません。microk8s
は、停止するまでポートをブロックしました。docker-compose pullを実行中に - エラー以下になっていましたエラー:http + docker:// localhostでDockerデーモンに接続できませんでした - 実行中ですか?
ソリューション - Sudo service docker start
問題が解決しました
これを試して:
Sudo ln -s/usr/local/bin/docker-compose/usr/bin/docker-compose
$ Sudo docker-compose up
上記の回答にあるように、group dockerに$ USERを追加するのと同じ手順に従いました。私のdockerインストールでdockerという名前のグループが自動的に作成されたので、私は新しいグループdockerを追加したくありませんでした。
しかしdocker-compose upを使ってもうまくいきませんでした。以前と同じエラーが発生しました。私の場合は(Ubuntu 18.10)Sudo docker-compose upで問題を解決しました。
ps:@アドバイスありがとうございます。
私にとっては、Dockerのアップグレードを開始し、途中でキャンセルしました。 Dockerが実行されていないことに気づきませんでした(実行されている場合、バッテリー残量、時間などによって、私のMacbookの上部のナビゲーションバーにアイコンが表示されます)。起動してアップグレードを完了すると、docker-compose up
は再び機能しました。