Dockerの小技 / トラブルシューティングメモ

ヨメレバCSS

 Dockerを使ってて遭遇したトラブルとかそういうのです。docker-composeもある。

 メモ書き程度ですが何かの役に立つかも知れない。

スポンサーリンク
GoogleAdSence レクタングル(大)

docker-compose のコンテナにはattachできない

 docker-compose upで作成したコンテナに、dockerコマンドで attachしようとしたけどうまく動いてくれませんでした。

 ググってみるとどうも他でもそうらしい。

参考: docker-composeで作成したcontainerにattach

 docker-composeのコンテナには、docker-compose execでattachするのがよさそう。

dockerコンテナからdockerを操作する

 docker.sockファイルを共有するって力技。面白い。

 コンテナの中から別のコンテナを実行させたくて調べてるときに見つけました。

参考:Docker コンテナ内から他の Docker コンテナに docker exec する

docker-composeで「指定されたファイルが見つかりません」と表示される。

 Windows環境で次のようになる場合。

 単純にDockerサービスが落ちてた。

docker-composeでvolumeが使えない

 Windowsで「ERROR: Cannot create container for service app: b’Drive sharing seems blocked by a firewall’」とエラーが出てマウントできないとき。

 ほんとにファイアウォールに邪魔されてた。

参考:Windows10 × Docker for Windows トラブルシューティング

 まさにウチもカスペルスキーを使っていて、先のリンクにあるように「プロテクション > ファイアウォール > ネットワーク > DockerNAT」を「許可するネットワーク」にしたら通りました。感謝。

dockerでentrypointを実行しつつcommandも実行する

 コンテナが起動したときのデフォルト実行スクリプトみたいな感じにできます。

 要は最後に「exec “$@”」を実行するシェルスクリプトを作成して、entrypointに設定する。

 そうするとそのスクリプトは実行されるし、引数として取ったcommandも実行されるしってわけ。

参考:Docker ENTRYPOINT & CMD: Dockerfile best practices

Docker RUNは一つづつ別々に実行している

 とするとwgetでダウンロードしたものは 「/」 に保存されます。

 コマンドを続けて実行したいのであれば、次のようにします。

Dockerコンテナ内からホストマシンのIPアドレスを指定する (Win/Mac)

 コンテナ内からホストマシンのIPを指定したときは、host.docker.internal と記載するとDNSで名前解決してくれます。

 またホストマシンでも host.docker.internal でアクセスすると、Dockerコンテナのホストを名前解決してくれるようです。

 例えばngixnでportsを8080:80でフォワーディングし、ホストマシンから host.docker.internal:8080 とするとアクセスできます。

参考:
– https://docs.docker.com/docker-for-windows/networking/#use-cases-and-workaroundsc
– https://qiita.com/xanagi/items/8d958425597947435fee

スポンサーリンク
GoogleAdSence レクタングル(大)