MacOSで開発されているいくつかのDockerイメージで構成されるアプリケーションがあり、Windowsでそれを開始しようとしています。ほとんどは機能しているようですが、機能していないTraefikロードバランサーがあります。
MacOSでは動作しますが、Windowsでは、アクセスするURLが何であっても、実際のコンテンツである404が「404ページが見つかりません」です。
Traefikの構成は次のようになります。
logLevel = "INFO"
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[entryPoints.https.tls.defaultCertificate]
certFile = "/certs/cert.pem"
keyFile = "/certs/cert.pem"
# Connection to docker Host system (docker.sock)
[docker]
watch = true
domain = "localhost"
[file]
[backends]
[backends.backend-mixpanel]
[backends.backend-mixpanel.servers]
[backends.backend-mixpanel.servers.mixpanel]
url = "https://api.mixpanel.com"
weight = 10
[backends.backend-yieldify]
[backends.backend-yieldify.servers]
[backends.backend-yieldify.servers.yieldify]
url = "https://td.yieldify.com/"
weight = 0
[frontends]
[frontends.frontend-mixpanel]
backend = "backend-mixpanel"
[frontends.frontend-mixpanel.routes.one]
rule = "HostRegexp:localhost,{catchall:.*};Path:/mixpanel/{.*};PathPrefixStripRegex:/{mixpanel}"
priority=10
[frontends.frontend-yieldify]
backend = "backend-yieldify"
[frontends.frontend-yieldify.routes.two]
rule = "HostRegexp:localhost,{catchall:.*};Path:/yieldify/{.*}"
priority=0
Dockerfileには以下が含まれます。
FROM traefik:Alpine
RUN apk add --update openssl
RUN mkdir -p /certs
RUN openssl req -x509 -newkey rsa:2048 -keyout key.pem -out ca.pem -days 1080 -nodes -subj '/C=UK/ST=London/L=London/O=ProjectX/OU=Engineering team/CN=local.wif'
RUN cat key.pem ca.pem > /certs/cert.pem
関連するdocker-compose.ymlセクションには以下が含まれます:
lb:
image: load-balancer
build: ${WORKSPACE}/go-home/load_balancer
ports:
- 80:80
- 443:443
links:
- wifi-ui-dev
- wifi-ui-prod
- portal
- wifi-api
env_file:
- .env
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro,delegated
- ${PWD}/load_balancer/traefik.toml:/etc/traefik/traefik.toml:ro,delegated
そして404を取得すると、そのDockerイメージのコンソール(stdoutおよびstderr)には何も送信されません。
何が起こっているのか、それが機能しない理由に近づく方法はありますか?
私の心配の1つはソケットのボリュームでした:
- /var/run/docker.sock:/var/run/docker.sock:ro,delegated
実行中のコンテナを確認すると、ファイルはソケットのように見えます。
/ # ls -laF /var/run/docker.sock
srw-rw---- 1 root root 0 Sep 2 11:04 /var/run/docker.sock=
念のため、その行を次のように置き換えてみました。
- //./pipe/docker_engine:/var/run/docker.sock
または:
- type: npipe
source: ////./pipe/docker_engine
target: /var/run/docker.sock
consistency: delegated
どちらの場合も、ソケットはディレクトリのように見えます。
/ # ls -laF /var/run/docker.sock
total 4
drwxr-xr-x 2 root root 40 Sep 3 14:52 ./
drwxr-xr-x 1 root root 4096 Sep 3 14:57 ../
わかりました、私はあなたの多くの問題であなたを指導するよう努めます。
取り付けとdocker.sockについて?
最初の例は、Docker for Windowsで完全なJenkins環境を開始する方法を示しています。 Jenkins環境内からDocker Engineへの参照が作成されるため、Windowsではdocker.sockへの参照が作成されます。これがDocker for Windows環境での私は毎日使用していますです。うまくいきます!
version: '3'
services:
jenkins:
image: docker-jenkins-maven-npm-oc:latest
ports:
- "8888:8080"
volumes:
- //k/data/var/jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
geosolschmea:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=somedatabase
- MYSQL_USER=johan
- MYSQL_PASSWORD=bladibladibla
volumes:
- //k/data/var/mysql-data:/var/lib/mysql
ports:
- "3306:3306"
Windows上のdocker-compose.ymlファイル内の別のSpringブートアプリケーション:
geosolutionapp:
image: myuser/geosolutions:latest
build:
context: ./
dockerfile: Dockerfile
depends_on:
- geosolschmea
environment:
- SCDATALIMIT=100000
ports:
- 8080:8080
volumes:
- //k/data/spring-boot-app:/data/spring-boot-app
networks:
- geosolutionsnet
Traefikの場合、docker-compose.ymlは次のようになります(Linuxでは、Amazon EC2)。これにより、Traefikダッシュボードを表示することもできます。これを使用して、使用しているフロントエンドとバックエンドを確認します。ボリュームを少し変更すると、Docker for Windowsで実行されます。
Treafikファイルへのパスを変更すると、Docker for Windowsでこれを簡単に実行できます。
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- //k/data/traefik/traefik.toml:/traefik.toml
- //k/data/traefik/acme.json:/acme.json
Linuxで毎日実行される完全な動作(ライブ)の例は次のとおりです。
version: '3'
services:
traefik:
image: traefik:v1.7.11-Alpine
container_name: traefik
restart: always
networks:
- geosolutionsnet
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/ec2-user/traefik/traefik.toml:/traefik.toml
- /home/ec2-user/traefik/acme.json:/acme.json
ports:
- "80:80"
- "443:443"
- "8080:8080"
labels:
- "traefik.docker.network=geosolutionsnet"
- "traefik.enable=true"
- "traefik.frontend.rule=Host:yourwebsite.nl;PathPrefix:/traefik"
- "traefik.port=8080"
- "traefik.protocol=http"
- "traefik.backend=traefik"
Docker for WindowsでTraefikを使用する場合、これを使用してtraefik.tomlファイルのdocker Engineに接続します。
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "yourwebsite.nl"
watch = true
exposedByDefault = false
Windows用のDockerでTraefikのルーティング作業がうまくいかない場合は、これをスケルトンとして使用し、「docker hello world」の例から始めて、Treafikからアクセスできるようにします。 Windows用のDockerでTraefikを動作させる基本的なルートを取得したら、実際のアプリケーションを段階的に追加できます。これは長い道のりとして感じられるかもしれませんが、私たちの経験ではこれは速く機能します。
もちろん、すべてのポートが外部から見える必要はありません。 docker-compose.ymlファイルの新しいバージョンを使用できます。
Treafikを使用する別のコンポーネントは次のようになります。
geosolutionapp:
image: myuser/myproduct:latest
environment:
- slackBotToken=xyz-etc
ports:
- 8080
networks:
- geosolutionsnet
labels:
- "traefik.enable=true"
- "traefik.docker.network=geosolutionsnet"
- "traefik.frontend.rule=Host:myapplication.nl"
- "traefik.port=8080"
- "traefik.protocol=http"
そして別の例:
slackbotsimple:
image: myuser/slackbotsimple:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- traefik
environment:
- slackBotToken=xoxb-etc-etc-etc
まだdocker.sockにスタックしていますか?
これらのヒントが問題の解決に役立つことを願っています!大成功!さらにサポートが必要な場合は、質問してください。
LinuxベースのDockerイメージをWindowsで実行するには、満たす必要のあるいくつかの要件があります。Hyper-Vサポートが有効になっているWindows 10 Pro以降。
また、「Hyper-V VM」という名前の「Hyper-V VM」をセットアップするマネージャーアプリである「Docker for Windows.exe」もインストールする必要があります。お役に立てば幸いです。
docker-compose.yml
に問題があるようです
この行:
- ${PWD}/load_balancer/traefik.toml:/etc/traefik/traefik.toml:ro,delegated
そしてこれ:
build: ${WORKSPACE}/go-home/load_balancer
システム変数の代わりに相対パスを使用できますか?いくつかの説明が書かれています ここ