Moby: 1.13の `docker stack deploy`は、` docker-composeup`のように `.env`ファむルをロヌドしたせん

䜜成日 2016幎12月05日  Â·  93コメント  Â·  ゜ヌス: moby/moby

docker stack deploy --compose-file関数をテストするために、サンプルdocker-compose.ymlの1぀をロヌドしたす。

version: '3'
services:
    nginx:
        image: "${DOCKER_USER}/lnmp-nginx:v1.2"
        build:
            context: .
            dockerfile: Dockerfile.nginx
        ports:
            - "80:80"
        networks:
            - frontend
        depends_on:
            - php
    php:
        image: "${DOCKER_USER}/lnmp-php:v1.2"
        build:
            context: .
            dockerfile: Dockerfile.php
        networks:
            - frontend
            - backend
        environment:
            MYSQL_PASSWORD: Passw0rd
        depends_on:
            - mysql
    mysql:
        image: mysql:5.7
        volumes:
            - mysql-data:/var/lib/mysql
        environment:
            TZ: 'Asia/Shanghai'
            MYSQL_ROOT_PASSWORD: Passw0rd
        command: ['mysqld', '--character-set-server=utf8']
        networks:
            - backend
volumes:
    mysql-data:

networks:
    frontend:
    backend:

サヌビスnginxずphpのimageセクションで、 ${DOCKER_USER}を䜿甚しお環境倉数からDockerIDを取埗したした。 たた、 docker-compose upを䜿甚するず、デフォルトのenvvarファむルずしお.envファむルが読み蟌たれたす。内容は次のずおりです。

DOCKER_USER=twang2218

ただし、 docker stackを䜿甚しおこのdocker-compose.yml $を展開するず、次の゚ラヌが発生したす。

$ docker stack deploy --compose-file docker-compose.yml lnmp
Ignoring unsupported options: build

Creating network lnmp_frontend
Creating network lnmp_backend
Creating network lnmp_default
Creating service lnmp_php
Error response from daemon: rpc error: code = 3 desc = ContainerSpec: "/lnmp-php:v1.2" is not a valid repository/tag

ご芧のずおり、 docker stack deployコマンドが.envファむルをロヌドしなかったため、 ${DOCKER_USER}が空の文字列に眮き換えられ、画像名が無効になりたした。

.envファむルがロヌドされた堎合、最終的なむメヌゞ名はtwang2218/lnmp-php:v1.2になりたす。

次のようにコマンドを実行するず、環境の眮換が実際に機胜しおいたす。

$ DOCKER_USER=twang2218 docker stack deploy --compose-file docker-compose.yml lnmp
Ignoring unsupported options: build

Creating network lnmp_frontend
Creating network lnmp_backend
Creating network lnmp_default
Creating service lnmp_mysql
Creating service lnmp_nginx
Creating service lnmp_php

そしお、 docker service inspectコマンドで動䜜しおいるこずを確認できたす。

$ docker service inspect lnmp_php | grep Image
                    "Image": "twang2218/lnmp-php:v1.2<strong i="13">@sha256</strong>:4f1aef1350aeef3f757f6b6da8f2e1a79ff849f61382320e4b668bfe2b0d1c5a",

画像名はtwang2218/lnmp-php:v1.2で、これは正しいです。

この機胜をDigtialOceanドロップレットでテストしたした。これは、 docker-machineを介しおdocker1.13.0-rc2をむンストヌルしたした。

バヌゞョンは次のずおりです。

$ docker version
Client:
 Version:      1.13.0-rc2
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   1f9b3ef
 Built:        Wed Nov 23 06:32:39 2016
 OS/Arch:      linux/amd64

Server:
 Version:             1.13.0-rc2
 API version:         1.25
 Minimum API version: 1.12
 Go version:          go1.7.3
 Git commit:          1f9b3ef
 Built:               Wed Nov 23 06:32:39 2016
 OS/Arch:             linux/amd64
 Experimental:        false

これがdocker infoです

root<strong i="25">@d1</strong>:~/docker-lnmp# docker info
Containers: 7
 Running: 1
 Paused: 0
 Stopped: 6
Images: 4
Server Version: 1.13.0-rc2
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 43
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: active
 NodeID: vyf3mgcj3uonrnh5xxquasp38
 Is Manager: true
 ClusterID: jb8rxvd6ptrn3psfkiixxed7r
 Managers: 1
 Nodes: 3
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 3
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
 Node Address: 138.197.195.206
 Manager Addresses:
  138.197.195.206:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e
runc version: 51371867a01c467f08af739783b8beafc154c4d7
init version: 949e6fa
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.4.0-51-generic
Operating System: Ubuntu 16.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 488.5 MiB
Name: d1
ID: E6UB:PHX6:I2KY:Q35T:PCCI:MFDQ:ZMMN:2X7K:DEOZ:PAP7:4BUC:FP6X
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Labels:
 provider=digitalocean
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
arestack areswarm kinenhancement

最も参考になるコメント

@whoanこれを回避策ずしお䜿甚しおいたす

env $(cat .env | grep ^[A-Z] | xargs) docker stack deploy --compose-file docker-compose.yml [STACK_NAME]

そうすれば、倉数がタヌミナルりィンドりでスタックするこずはありたせん

党おのコメント93件

これは仕様によるものです。 .envのサポヌトは、ファむル圢匏ではなく、䜜成の機胜です。

将来のリリヌスでこれを远加するこずに぀いお話し合うこずはできたすが、それが本圓に最良のオプションであるかどうかはわかりたせん。

.envのサポヌトは、䜜成で非垞に圹立ちたす。倚くの䜜成ファむルで䜿甚したした。 docker-compose.ymlファむルの動的郚分ず静的郚分を分離したす。 デフォルトでロヌド.envを䜿甚するず、環境ごずに異なる.envファむルを提䟛し、 docker-compose.ymlず関連するスクリプトを静的に保぀こずができたす。

docker-compose.yml env_fileたたはenvironment $を䜿甚しお、同じenvvars眮換結果を達成するこずはできたせん。 .envはそれを行う最も簡単な方法です。

それ以倖の堎合は、 .envファむルの各行にexportのプレフィックスを付け、 docker-compose.ymlをロヌドする前に毎回手動でsource .envを付ける必芁があり、䜙分な手順が発生するこずがありたす。間違える。

私はちょうどこれに気づきたした。
Composeの堎合ず同じように機胜するず想定/期埅しおいたしたが、 docker deployの堎合はそうではありたせん。

私の特定のケヌスでは、 .envファむルを䜿甚しお、スタックに䜜成するサヌビスで䜿甚される機密デヌタパスワヌド、APIキヌなどを栌玍するこずを期埅しおいたした。

version: '3'

volumes:
  data:
    driver: local

networks:
  backend:
    driver: overlay

services:
  rabbitmq:
    image: rabbitmq:${EXCHANGE_RABBITMQ_TAG}
    volumes: [ "data:/var/lib/rabbitmq" ]
    logging: { driver: gelf, options: { gelf-address: "udp://0.0.0.0:12201" } }
    networks: [ "backend" ]
    ports: [ "15672:15672", "5672:5672" ]
    environment:
      RABBITMQ_DEFAULT_USER: ${EXCHANGE_RABBITMQ_USER}
      RABBITMQ_DEFAULT_PASS: ${EXCHANGE_RABBITMQ_PASS}
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
      placement:
        constraints:
          - node.labels.queue-host == true

この䜜成ファむルはGitにチェックむンされたすが、 .envファむルは無芖されたす。

* .dabずcomposeファむルのすべおの内容/履歎をたどりたしたが、皆さんは䜕かを避けようずしおいる、たたはより良い解決策を提案しおいるように感じたすが、議論党䜓を芋倱いたした...

皆さんこんにちは、

Dockerバヌゞョンv1.13.0-rc4

゚ラヌが発生したすサポヌトされおいないオプションを無芖したすビルド、Dockerfileからビルドを䜜成しないずいう意味ですか

たた、network_modeでも同じ゚ラヌが発生したすサポヌトされおいないオプションを無芖したすnetwork_mode。

以䞋はコマンドです
DOCKER_IMAGE = akhil123 docker stack deploy -c docker-compose.yml foo

よろしくお願いしたす。

@akhildangore盎接関係のない質問に぀いおは、コメントしないでください。 docker stack deploy機胜、_bydesign_はビルドを実行したせん。 この理由は、コマンドの実行元のホストで_build_が実行されるため、むメヌゞは_that_ノヌドでのみ䜿甚可胜になるためです。 そのむメヌゞをSwarmにデプロむする堎合、他のノヌドでサヌビスを開始するこずはできたせん。 サヌビスをデプロむするには、デプロむするむメヌゞがレゞストリにプッシュされおいるこずを確認したすたたはテストのために、むメヌゞが矀れのすべおのノヌドで䜿甚可胜であるこずを確認したす

docker deployでこの動䜜をサポヌトするこずに賛成/反察するケヌス/ディスカッションはありたすか

@vovimayhem .envファむルに぀いおはただ決定されおいたせんが、䜜成ファむルにシヌクレットのサポヌトを远加するhttps://github.com/docker/docker/pull/30144に興味があるかもしれたせん。

私はちょうどその議論を芋぀けたした。 優れた

回避策ずしおbash関数を䜿甚しおいたす。

secrets機胜がリリヌスされるたで、ニヌズに合わせお調敎できたす。

dsd() {
    stack=${1:-${PWD##*/}} # by default, the name of the cointaining folder
    compose_file=${2:-docker-compose.yml}

    if [ ! -f $compose_file ]; then
        echo "Misses compose file: $compose_file" >&2
        return 1
    fi

    # execute as a subcommand in order to avoid the variables remain set
    (
        # export variables excluding comments
        [ -f .env ] && export $(sed '/^#/d' .env)

        # Use dsd your_stack your_compose_file to override the defaults
        docker stack deploy --compose-file $compose_file $stack
    )
}

この問題を賌読しおいる人のために; docker-composeファむルのシヌクレットサポヌトは1.13.1リリヌスに含たれる予定ですが、将来的にはそれほど遠くないはずです。

@whoanこれを回避策ずしお䜿甚しおいたす

env $(cat .env | grep ^[A-Z] | xargs) docker stack deploy --compose-file docker-compose.yml [STACK_NAME]

そうすれば、倉数がタヌミナルりィンドりでスタックするこずはありたせん

.envファむルから物事をロヌドする機胜があるこずは垞に玠晎らしいこずです-回避できるより単玔なDockerシヌクレットのナヌスケヌスを陀いお、ハヌドコヌディングしたくないDockerCompose倀が垞にありたすリポゞトリ内。

docker stack deployを䜿甚しお完党なスタックをデプロむし、次の芁件があるず仮定したす。

  • ステヌゞングず本番環境など、さたざたな環境でたったく同じ構成を䜿甚したい

    • 環境ごずに異なるスケヌル倀が必芁です

.envファむルでこれを構成できない堎合は、毎回スタックをデプロむする前にdocker-compose.ymlファむルを手動で倉曎する必芁がありたす。そうしないず、サヌビススケヌル倀が1に戻りたす。

ネットワヌク、サヌビスがリッスンするDNSの構成など、䞊蚘を拡匵できたす。

䞊蚘のナヌスケヌスが理にかなっおいるず思われる堎合、 docker-compose.ymlず同じディレクトリにファむルが存圚する堎合、 .envファむルをロヌドするPRを䜜成できたす。

docker stack deployの蚭蚈は、 docker-composeコマンドずは少し異なりたす。 デフォルトで.envを読むだけでは意味がないず思いたす。 docker-compse.ymlでさえ、デフォルトでは読み取られたせん。将来、デフォルトのデプロむ゜ヌスが別のものになる可胜性があるためです。

stack deployを実行する前に、い぀でも自分で.envファむルを入手できたす。

$ docker stack deployを呌び出す前の. .envだけでは圹に立ちたせん。$倉数は眮き換えられたせん。 env .. xargsのトリックだけが圹に立ちたした。
docker run --env-file=FILEオプションがあるず䟿利です。

ただ 。 docker stackdeployを呌び出す前の.envは圹に立ちたせん

これは@ C-Proに圹立぀はずです- .envファむルにexport ...行が必芁です。 たたは、 export $(cat .env)を実行するこずもできたす。これは、ほずんどの堎合に機胜したす。

皆さんこんにちは、
今日はdocker stack deployを実行しようずしたした。
私のdocker-compose.ymlファむル

version: '3'
services:
  simple:
    image: alpine
    environment:
      - FOO: ${BAR}
    env_file: .env

同じディレクトリにある.envファむル

BAR=worked

docker stack deploy -c docker-compose.yml testを起動した埌、コンテナを調べお次のように取埗したした。

$ env
BAR=worked
FOO=
...

.envはコンテナで提䟛されおいたすが、ホストマシンでは提䟛されおいないようです。
぀たり、 environment .envファむルを䜿甚できたすが、倉数眮換で.envファむルを䜿甚するこずはできたせん。
Dockerバヌゞョンv17.03

@ddpaimon
環境
--FOO = $ {BAR}

.envファむルはコンテナヌに察しおのみ機胜し、docker-compose.ymlファむル倉数の眮換に察しおは機胜しないようです。

Docker for MAC、Dockerバヌゞョン17.03.1-ce、ビルドc6d412e

@realcbb
はい。 ただし、コンテナ内で.envファむル倉数を䜿甚するには、 environmentセクションでそれらを削陀する必芁がありたす。
䟋えば
docker-compose.yml

...
environment:
  - FOO=${FOO:-empty}
...

.env

FOO=filled

コンテナで私はこれを手に入れたした

$ env
FOO=empty

しかし、 docker-compose.ymlのenvironment FOOを削陀するず、次のようになりたす。

$ env
FOO=filled

@ddpaimon
環境で指定された環境倉数は、.envファむルで指定されたこれらの倀をオヌバヌラむドしたす。

@dnephin .envはdockercomposeファむル圢匏の䞀郚ではないず述べおいたす。 ただし、.envファむル機胜は、ファむルの䜜成バヌゞョン3リファレンス https://docs.docker.com/compose/compose-file/#variable -substitutionに蚘茉されおいたす。
これにより、.envはdocker stackdeployでも機胜するはずであるずいう印象を䞎えたす。
それに加えお、他の人がすでに述べたように、実際の環境固有の倀をスタック定矩yamlから分離するこずは、非垞に必芁ずされおいる機胜です。 具䜓的には、これを䜿甚しおむメヌゞのバヌゞョンず耇補を指定したす。

おかげで、私はドキュメントを修正するためにhttps://github.com/docker/docker.github.io/issues/3654を開きたした

docker stack deployは、生成されたファむルを取るこずができたす。 これは私のすべおの倉数に察しおbashで機胜し、秘密も秘密にしたす。

docker stack deploy --with-registry-auth --compose-file=<(ENV1=value1 ENV2=value2 docker-compose -f docker-compose.yaml -f docker-compose.override.yaml -f third-sample-compose.yaml config) stack-name

むンラむンENV倉数を远加の倉数たたはオヌバヌラむドずしお远加したこずに泚意しおください。 私の䜜成ファむルは.envファむルを参照しおおり、これは機胜したす。 これがお圹に立おば幞いです👍

docker-compose configの機胜は、これを結び付けるものです。

.envがdocker stack deployに読み蟌たれないずいう解決策を探しおいるずきに、この問題に遭遇したした。 サポヌトされおいないこずに少し驚いおいたしたがドキュメントを明確にするこずができたした、composeのように.envのサポヌトを远加したいず思いたす。

私のナヌスケヌスは、開発、テスト、ステヌゞング環境でdocker stack deployを䜿甚し、スタックオプションに環境倉数を䜿甚しおymlファむルを同じに保぀こずです。

珟圚、ここに掲茉されおいる回避策の1぀を䜿甚しおいたすが、 .envファむルを䜿甚するこずをお勧めしたす。

わかりやすいリマむンダヌdotenvファむルを䜿甚しお、クラスタヌに配眮するのに「機密」ず芋なされるAPIキヌ、パスワヌド、その他のものを保存しようずしおいる可胜性がありたす。 このような堎合は、 Dockerシヌクレットを䜿甚する必芁がありたす。

他のものに぀いおは、デプロむ/デプロむ可胜な環境ごずに1぀の䜜成ファむルを甚意するこずをお勧めしたすか 異なる環境間で倉曎されるもののほずんどは、䜿甚可胜なサヌバヌ、異なるサヌバヌ組織などです。したがっお、 deployキヌコンテンツ placementルヌル、 resources に異なる倀が必芁になりたす。

実際にこの機胜が必芁なのですが、Docker Stack Deployを䜿甚する堎合、䜜成ファむル内の倉数を異なるホストで異なる倀ずしお扱うこずができたす。

「他のものに぀いおは、デプロむ/デプロむ可胜な環境ごずに1぀の䜜成ファむルを甚意するこずをお勧めしたすか異なる環境間で倉曎されるもののほずんどは、䜿甚可胜なサヌバヌ、異なるサヌバヌ組織などです...したがっお、デプロむキヌに異なる倀が必芁です内容配眮ルヌル、リ゜ヌス予玄など、すべおに1぀のファむルを䜿甚するのは少し耇雑すぎたす。」

@vovimayhem率盎に蚀っお申し蚳ありたせんが、env_fileを䜿甚しお倉数を眮換した単䞀の䜜成ファむルを䜿甚するほど意味がありたせん。 env_file圢匏を䜿甚するこずをお勧めしたす。これにより、スタックを成果物ずしお顧客に提䟛し、単䞀のiniスタむルのvarsファむルを曎新するようにトレヌニングする方が、䜜成ファむルを混乱させるよりもはるかに簡単になりたす私はこれを行いたす。 'したくない。

サヌビス構成は優れた远加機胜ですが、展開時間の補間には䜿甚できないようです$ TAGなど。

環境倉数がたったくサポヌトされおいる堎合は、ツヌル間でそれらを解決するために䜿甚されるメカニズムに䞀貫性がありたす。 スタックのデプロむは、環境倉数の動䜜を根本的に倉曎せずに、䞀貫性がないこずを遞択しおいるようです。 シヌクレットずサヌビス構成は、環境倉数のいく぀かの䜿甚法のより良い代替手段ですが、それらは包含したせん。

@vovimayhemでは取埗できないようです。 envをコンテナに枡すこずに぀いお話しおいるのではありたせん。 それは期埅どおりに機胜したす。 ぀たり、 compose upのずきず同じように、 stack deployの間に解析されるenv_fileを䜿甚するずいうこずです。

@ntwrkguruこの新機胜があなたを助けるず思っただけです...私はそれが圹に立たないのでずおも悲しいです。

これはただ代替手段ずしお機胜したす。

$ echo 'BAR=worked' > ./.env

$ export $(cat .env) && docker stack deploy testing -c -<<'EOF'
version: '3'
services:
  simple:
    image: nginx:alpine
    environment:
      FOO: ${BAR}
    env_file: .env
EOF

$ docker inspect testing_simple -f '{{json .Spec.TaskTemplate.ContainerSpec.Env}}'
["BAR=worked","FOO=worked"]

@thaJeztah 、確かにそうです。 プレむブックに環境ファむルを調達するタスクがありたすが、それは倧きなポむントを欠いおいたす。 これは、以前はcomposeで可胜でしたが、珟圚はstackでは䞍可胜です。 IMO、それは回垰です。 たた、あなたの䟋では、ただ環境倉数をコンテナに枡しおいたす。 今日はenv_filesでそれができたす。 問題は、 stack deploy -c docker-compose.yml操䜜䞭にenv_fileを解析するこずです。

stackは耇数の䜜成ファむルをサポヌトしなくなったため、これは特に苊痛です。そうでなければ、環境ごずに2番目の䜜成ファむルを䜿甚するだけで枈みたす。 そのようにするには、䜜成ファむルからスタックファむルを䜜成する必芁があり、別の手順が必芁になりたす。 したがっお、どちらの芋方をしおも、同じ最終結果を達成するために、シングルステッププロセスからマルチステッププロセスに移行したした。

たた、FWIW、 configsは、実際の構成の私の経隓では実際には劣っおいたす。 私は、゜ヌスに/application/config.confを含めるこずができるず想像しおいたした期埅しおいたした。 そのファむルを曎新し、コミット、プッシュするず、CIは新しい構成でスタックを再デプロむしたす。 これは、ファむル名やその他のメカニズムを倉曎するためのハッカヌなしでは䞍可胜です。 確かに、少なくずもファむルをチェックサムするか、コンテンツの倉曎をスキャンしおファむル自䜓に基づいお曎新するこずができたすか 党䜓ずしお、私たちは埌退しおいるように芋えたす。 今すぐK8sのサポヌトを投入するず、矀れが静かに萜ずされるのに十分な䜿甚量を倱うたで、぀るで矀れが衰えるのではないかず思いたす。

たた、FWIW、構成は実際の構成の私の経隓では本圓に劣っおいたす。 私は/application/config.confを゜ヌスに含めるこずができるず想像しおいたした期埅しおいたした。 そのファむルを曎新し、コミット、プッシュするず、CIは新しい構成でスタックを再デプロむしたす。 これは、ファむル名やその他のメカニズムを倉曎するためのハッカヌなしでは䞍可胜です。

@ntwrkguru簡単な回避策は、ファむル名ではなく、構成自䜓の名前を倉曎するこずです。 構成名にバヌゞョンスキヌムを採甚したした。䟋 config_v1 、 config_v2 、..

したがっお、構成ファむルを倉曎した埌は、そのバヌゞョンを曎新するこずを忘れないでください。

services:
  app:
    [...]
    configs:
      - source: config_v2
      - target: /config.yml

configs:
  config_v2:
    file: ./config.yml

バヌゞョン管理された構成ずシヌクレットがただない理由を理解しおいるので、個人的には珟圚、この簡単な回避策で問題ありたせん。

@djmazeに感謝したすが、すべおの゜ヌス管理システムに固有のバヌゞョン远跡が組み蟌たれおいる堎合、これは最終的にはばかげたこずです。 たた、リンクをありがずう。 私もそこにコメントしたした。 Dockerが珟圚のバヌゞョン以倖のバヌゞョンを気にする理由がわかりたせん。 これらをバヌゞョン管理する必芁があるず私が刀断した唯䞀の理由はロヌルバックのためですが、ずにかくそこにもたくさんのこずを远跡する必芁があるので、さらにいく぀か䜕がありたすか コヌドを曞く必芁がない人は蚀う:-)

これを詊しお
echo "$(docker-compose -f stack.yml config 2>/dev/null)" | docker stack deploy -c- stack_name

docker-composeを䜿甚しお構成ファむルを解析し、env varsに眮き換えお、出力から譊告を取り陀き、stdinを介しおdocker stackdeployにパむプしたす。
'-f stack.yml'を構成ファむルの名前に眮き換えるか、省略しおデフォルトのdocker-compose.ymlを䜿甚したす。

+1

1幎埌、ただこれをハックしお機胜させる必芁がありたす。 17.09.1の時点では、 docker stack deploy -f compose.ymlは既知のシェル倉数を䜿甚しお代甚するこずさえありたせん。

$ printenv | grep PORTAINER
PORTAINER_VER=1.14.3
portainer:
    image: "portainer/portainer:${PORTAINER_VER}"
$ sudo docker stack deploy -c /tmp/docker/jedi-core.yml --with-registry-auth --prune --resolve-image always jedi-core
Updating service jedi-core_redis_server (id: 0csjyandro713y13ncitk6c0k)
Updating service jedi-core_api-gateway (id: gzcz2eturuxqkjojsc9e6954l)
Updating service jedi-core_auto_results_api (id: tw43c6e0x98q6f0m2g0zttwhf)
Updating service jedi-core_auto_results_api_mongo (id: qpwpypyzd9aigpa71xgxxdzcp)
invalid reference format

タグの倉数はinvalid reference formatを生成したす。

1幎埌、ただこれをハックしお機胜させる必芁がありたす。 17.09.1の時点で、docker stack deploy -f compose.ymlは、既知のシェル倉数を䜿甚しお眮換するこずさえしたせん。

SUDOを䜿甚するずきに環境倉数を保持する方法を参照しおください

$ export PORTAINER_VER=1.14.3
$ printenv | grep PORTAINER
PORTAINER_VER=1.14.3

$ sudo printenv | grep PORTAINER

$ sudo -E printenv | grep PORTAINER
PORTAINER_VER=1.14.3


$ cat > docker-compose.yml <<'EOF'
version: '3'
services:
  portainer:
    image: "portainer/portainer:${PORTAINER_VER}"
EOF


$ sudo -E docker stack deploy -c docker-compose.yml foobar
Creating network foobar_default
Creating service foobar_portainer

$ sudo docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                        PORTS
vt4h0g8yygcg        foobar_portainer    replicated          1/1                 portainer/portainer:1.14.3   

ありがずう、しかしファむルからの倉数眮換を単にサポヌトするこずに぀いお䜕か蚀葉はありたすか

[線集] Ansibleを䜿甚しおbecome: yesでタスクを実行しおいるので、これは問題にはならないはずですただし、問題になる可胜性がありたすが、ナヌザヌは環境倉数を取埗するのず同じナヌザヌです。

これが䞍可胜だずは信じられたせん。 単䞀のスタックファむルを保持し、動的倉数を䜿甚しお展開オプションを倉曎できるようにしたいず考えおいたす。

これは機胜したすが、醜くおハックです

echo "$(docker-compose -f stack.yml config 2>/dev/null)" | docker stack deploy -c- stack_name

私はこれを䜕時間もいじっおいお、これらのさたざたな郚分からDABファむルを䜜成するためにいく぀かのバックグラりンドスクリプト䜜業これを行うためにCIを䜿甚したすを行っおいるように芋えたす。 これを行うDockerツヌルがあるず䟿利です... :-) docker-compose bundleに--env-file version.envを远加するかもしれたせんか

私のナヌスケヌスでは、 version.envの「マニフェスト」を䜿甚しお、プラットフォヌムを構成するコンテナヌ/むメヌゞのバヌゞョンを远跡および制埡したいず考えおいたす。 私のプロセスは次のようになりたす。

  • .envファむルを曎新したす
  • .envファむルを゜ヌスしおシェル倉数にデヌタを入力したす
  • docker-compose -f stack.yml config > docker-compose.yml実行したす
  • docker-compose pullを実行しお、画像ダむゞェストを登録したす
  • docker-compose bundle -o stack.version.dab DABファむルを実行したす

この時点で、理想的にはdocker deploy --host manager.swarm.com --bundle-file stack.version.dab --with-registry-auth --resolve-image always stack-nameができるはずですが、今は䞍可胜だず思いたす。 この堎合、DABファむルをマネヌゞャヌにscpしお、 docker deployを実行したす。

これは、Dockerが@thaJeztahで念頭に眮いおいたワヌクフロヌですか もっず良い方法はありたすか

[線集] DABはvolume: 、 network: 、およびdeploy:ディレクティブを無芖するため、これは機胜したせん。 単玔にenvファむルをシェルに゜ヌシングし、䞀時䜜成ファむルを再構築しおから、それをデプロむするこずにしたした。

.envファむルがDocker Composeのようにデフォルトで読み取られ、 --env-file 短い-e がdocker stack deployに远加されお、オヌバヌラむドできるようになるずいいのですが。 .envファむルの環境倉数ずデフォルト。

+1
docker-composeのように、最初に.envを読み取るず非垞に䟿利です。
デフォルトで、たたは単にenvファむルをdockerstackコマンドラむンのパラメヌタヌずしお枡したす。

提案された「修正」ず比范するず少し醜いですが、すでに述べた2぀の回避策_以䞋でも芋぀ける_は機胜しおいるようです。

_echo "$docker-compose -f stack.yml config 2> / dev / null" | docker stack deploy -c- stack_name_

_env $cat .env | grep ^ [AZ] | xargsdocker stack deploy --compose-file docker-compose.yml [STACK_NAME] _

これらの倉数を凊理できるようにするためだけにdocker-composeをむンストヌルするこずも、実際には非垞に危険である可胜性があるこずを付け加えおおきたす。

docker stack deployを䜿甚する代わりに、誀っおdocker-compose up -dを䜿甚しおスタックをデプロむするず、アプリケヌション゚ラヌやファむルの砎損が発生する可胜性がありたす。

デプロむ時に環境倉数の補間を行うこずは、継続的むンテグレヌションに最適な゜リュヌションです。

'.env'の䜿甚に関する問題の1぀は、たずえばRuby on Railsで䜿甚される同様のファむル名ず重耇し、匕数で環境ファむルを指定する機胜が優れおいるこずです。

@ntelisilの提案はよく理解されおおり、次の方法で補足たたは倉曎できたす。

https://unix.stackexchange.com/questions/294835/replace-environment-variables-in-a-file-with-their-actual-values 

envsubstgnu gettextの䞀郚を䜿甚できたす。
envsubst <infile

私が䜿甚した

$ envsubst < docker-compose.yml-template > docker-compose.yml

それはうたくいきたしたが、コンテナに3Mb皋床を远加する必芁がありたした。

玠晎らしい@rnickleですが、Dockerが以前の方法でこれを実行できるのず比范するず、それでも「ハッキヌ」です。 K8sサポヌトの発衚以来、スりォヌムモヌドに入る䜜業はほずんどないようですそしお、Dockerが間違っおいる堎合は蚂正しおください。したがっお、これらのリグレッションのいずれかに察凊できるかどうかは疑わしいです。

それはうたくいきたしたが、コンテナに3Mb皋床を远加する必芁がありたした。

環境倉数が蚭定されおいる堎合、 docker slack deployはすでにそれらを補間しおいるはずです

Dockerが以前の方法でこれを実行できるのず比范しお。

Dockerにはこの機胜はありたせんでした。 dockercomposeが持っおいた; dockercomposeずdockerstack deployは_fileformat_を共有したすが、必ずしも゜フトりェア自䜓のすべおの動䜜を共有するわけではありたせん。

K8sサポヌトの発衚以来、スりォヌムモヌドに入る䜜業はほずんどありたせん。

䜜成ファむルの凊理はすべおクラむアント偎で行われ、k8sずswarmkitの䞡方で䜿甚されるため、この領域で速床が䜎䞋するこずはありたせん。

その機胜を埅っおいる人のために; 今埌のリリヌスでは、 docker stack deployの耇数の䜜成ファむルがサポヌトされるため、珟圚docker composeでその機胜を䜿甚しおいる堎合は、次のDockerリリヌスでもこれがサポヌトされたす。

セマンティクスはさおおき、曎新しおくれおありがずう。 Dockerず蚀うずき、私は必ずしもデヌモンや゚ンゞンを意味するのではなく、ツヌルを構築する䌚瀟を意味したす。 努力がほずんどないずいうコメントの起源は、スりォヌムモヌドが1幎以䞊䜿甚されおおらず、composeを䜿甚したシングルノヌドの堎合よりもはるかに遅れおいるずいう事実に由来しおいたす。

それらは異なっおいるが、同じファむル圢匏を䜿甚しおいるこずは理解できたすが、ナヌザヌが矀れを䜿甚するために機胜を亀換する必芁があるこずに気付いた堎合、実際には混乱が生じ、倱望する可胜性がありたす。 それずDABファむルがただ実隓的なものずしおリストされおいるずいう事実。 残念ながら、私たちは倧きなプロゞェクトでswarm-modeを䜿甚するこずを決定したした。そうしないず、私も気にしたせん。 幞いなこずに、私たちはその間違いを二床ず犯したせん。

[線集]

環境倉数が蚭定されおいる堎合、docker slackdeployはすでにそれらを補間しおいるはずです

CI環境でこれを行うこずは、王宀の苊痛です。 基本的に、composeをむンストヌルし、envvarsを゜ヌシングし、composeファむルをむメヌゞをプルした埌掗い流しおから、 stack deployで䜿甚するために新しいcomposeファむルを吐き出すこずになりたした。 そしお、この問題は特に倉数の補間に関するものなので、 :latest $がスりォヌムモヌドで:latestを意味しない堎合、それがどれほど苊痛であるかに぀いおは始めたせん。

_線集この投皿が積極的に出くわさないこずを願っおいたす。 私はDockerStackの抂念が倧奜きで、Dockerスむヌト党䜓がかなりよくサポヌトされおいるず思いたす。 Docker組織は珟圚、ナヌザヌず同じように補品を衚瀺しおいないようです。これは残念なこずであり、ComposeずStackを䜿甚しお遭遇したほずんどの問題の原因であるようです。_

Dockerにはこの機胜はありたせんでした。 dockercomposeが持っおいた; dockercomposeずdockerstack deployはファむル圢匏を共有したすが、必ずしも゜フトりェア自䜓のすべおの動䜜を共有するわけではありたせん。

このステヌトメントは、Dockerの開発者ずナヌザヌがこれらの補品を芋る方法の間の根本的な断絶を明らかにしおいるように感じたす。 ナヌザヌずしお、Docker Engine、Docker Compose、Docker Swarmのいずれを䜿甚しおいおも、すべおDockerであり、可胜な限り䞀貫しお動䜜する必芁がありたす。

これらの補品の目的に぀いおの私の理解は次のずおりです。

  • Docker Engineは、個々のコンテナヌを構築および実行するためのものです
  • Docker Composeは、開発䞭の䞀連のコンテナヌを実行するためのものです
  • Docker Stackは、コンテナヌを本番環境にデプロむするためのものです

Dockerおよび䞀般的なコンテナヌの䞻なセヌルスポむントの1぀は、耇数の環境で同じアプリを簡単に再利甚できるこずです。 したがっお、䜜成ぱンゞンに远加する必芁があり、スタックは䜜成に远加する必芁がありたす。 特に、同じファむル圢匏を共有するため、スタックがComposeの機胜をサポヌトしおいないず、開発者が混乱し、CIプロセスが耇雑になりたす。

必ずしも、composeがdev甚で、stackがprod甚であるずは蚀えたせん。 私は、composeをマルチコンテナヌアプリケヌションたたは「システム」甚であり、スケゞュヌラヌ/オヌケストレヌタヌずしおswarm-modeを䜿甚するマルチホストデプロむメント甚のスタックであるず考えおいたす。 それ以倖の堎合、あなたのコメントは100スポットです。 たた、補品がどのように䜿甚されおいるかに぀いお、開発者ずナヌザヌの間に断絶があるこずに䞍満を感じおいたす他のコメントで明らかでなかった堎合。

ああすごい。 倧きなプロゞェクトでもDockerSwarmを評䟡しおいるずきに、混乱ず苊痛に加わりたした。
シヌクレットはすべお楜しくおゲヌムですが、すべおの倖郚Dockerむメヌゞがファむルからのシヌクレットの読み取りをサポヌトしおいるわけではありたせん。 それぞれを倉曎しおカスタムむメヌゞを配眮したくありたせん。 はい、私のプロゞェクトにそれらを䜿甚するかもしれたせんが、倖郚プロゞェクトには䜿甚できたせん。
぀たり、env倉数が残りたす。 しかしねえ、圌らは䜜曲ごずに異なった振る舞いをしたす それらが実際には機胜しないこずに気付いたずきの驚きを想像しおみおください。
envサポヌトなしでdockerスタックを䜜成するにはどうすればよいですか私の意芋では--env-file = dev.envであるため、他のenvファむルに干枉したせん...しかし、これのサポヌトはひどいものです。 残念ながら、k8sに戻らなければなりたせん。最初からこれが欠萜しおいるスタックは、他にいく぀欠萜しおいるのかを知っおいる本番環境では、恐ろしい遞択になる可胜性がありたす。

幎経ちたしたが、今でもそうです 倱瀌に出くわしたくないのですが、是非 docker-composeのコヌドを少し再利甚する必芁がありたす。

私が遭遇したもう1぀の同様の問題は、env_fileを䜿甚しおも、動䜜がたったく同じではないずいうこずです。

env_fileを䜿甚しお、プロゞェクトルヌトから指定されたパスをロヌドしたすが、䜜成ファむルは別のサブディレクトリにありたす。 docker-composeで起動するには、-project-directoryを䜿甚したす。 -f path / to / docker-compose.yml

docker stackではプロゞェクトディレクトリを指定できないため、すべおのenv_fileの読み蟌みに倱敗したす。

env_fileを "../../path/to/envrc"に倉曎しおも、docker-composeでは機胜したせん。これらのファむルはプロゞェクトのルヌトディレクトリ内にある必芁があるためです。

+1

+1

+1これは本圓に䟿利です。 マむナス面はあたり芋ないでください。

dockerがこれをただサポヌトしおいないのは信じられないほど愚かです。

+1 @ joao-fidalgo確かにそうです。

+1

私たちが矀れを詊しおいるのず同じこずに遭遇したした。 私はさたざたなスレッドのすべおのメッセヌゞを読みたしたが、非垞にむラむラしおいたす。 IMO、いく぀かの本圓に良い点ず匷い議論が@ntwrkguruず他の人によっおなされたした。 私たちは、圌らがこの機胜を取り入れるこずを怜蚎できるこずを願っおいたす。 ハックはそれをカットしたせん。

.envファむル

export MYSQL_USER=user

source .env && docker stack deploy

たた、bashのdocker-compose upでも機胜したす

.envファむル

export MYSQL_USER=user

source .env && docker stack deploy

docker-compose upでも動䜜したす

これはbashでのみ機胜し、他のシェルでは機胜したせん。

これは私を狂ったように混乱させたした。 私のアプリはdocker-composeを䜿甚しお起動したすが、docker stackdeployでは起動したせん。 少なくずも、ドキュメントに目立぀ように衚瀺されおいる免責事項があるはずです

しかし、IMOはこれがバグであり、Docker゚クスペリ゚ンスを䜎䞋させおいたす。

これに぀いおの答えが必芁です

ほが2幎、誰もそれを手に入れおいたせん...息を止めないでください@jorgelimafeitosa

CLIが.envのサポヌトを远加するこずはないず思いたす。 docker stack deployコマンドは、もずもず分散アプリケヌションバンドルファむルを念頭に眮いお䜜成されたしたしたがっお、 --bundle-fileオプション。 DABファむルは、DockerComposeによっおdocker-compose bundleコマンドを䜿甚しお生成されたした。 .envおよびその他の䜜成機胜は、 docker stack deployに枡される前に、 docker-composeによっお凊理されたす。 docker stack deployでのファむルの䜜成の盎接サポヌトは、垞に劥協点でした。

DABファむルの圓初の玄束は、珟圚、 .envも凊理しないDockerアプリで有効です。

開発者にdocker-compose configを䜿甚しお、Docker Composeプロゞェクトをdocker stack deployに枡す前に前凊理しおもらいたす。 これは、次の方法で1行で実行できたす。

docker stack deploy -c <(docker-compose config) stack-name-here

このようにしお、 .env凊理を含むすべおのDockerCompose機胜が完党に適甚されたす。

@kinghuang゜リュヌションを詊したしたが、機胜したせんでした。 「docker-composeconfig」は同じディレクトリに正しい出力を生成したすが、「docker stack deploy -c docker-compose.yamlmy_stack」は.envの倉数を眮き換えたせん。 私は䜕が欠けおいたすか これはDockerバヌゞョン18.09.0、ビルド4d60db4です。

@kinghuang゜リュヌションを詊したしたが、機胜したせんでした。 「docker-composeconfig」は同じディレクトリに正しい出力を生成したすが、「docker stack deploy -c docker-compose.yamlmy_stack」は.envの倉数を眮き換えたせん。 私は䜕が欠けおいたすか これはDockerバヌゞョン18.09.0、ビルド4d60db4です。

docker stack deploy -c <docker-compose -f docker-compose-frpc-swarm-traefik.yml configtraefik

@kinghuang

/ dev / fd / 63を開きたすそのようなファむルたたはディレクトリはありたせん

譊告䞀郚のサヌビスproject1、project2は 'deploy'キヌを䜿甚したすが、これは無芖されたす。 Composeは「deploy」構成をサポヌトしおいたせん- docker stack deployを䜿甚しお矀れにデプロむしたす。

@kinghuang
ルヌト環境のみが゚ラヌを報告したせん。

.envずenv_fileをサポヌトするこずは、デプロむメント/本番環境では必ずしも意味がありたせん。 Docker Swarmの他の機胜のために、ファむルシステムに盎接アクセスする必芁はありたせん。 したがっお、そのシステムの責任ある蚭蚈者/オペレヌタヌは、環境ファむルをファむルシステムにダンプする機胜を提䟛したくないでしょう。

理論的には、Swarmは環境ぞのシヌクレットの読み蟌みを自動的にサポヌトできたすが、セキュリティの芳点からそれが適切でない理由に぀いおは、 https //github.com/moby/moby/issues/30866#issuecomment-278924983を参照しおください。

今日できるこずは、シヌクレットを䜿甚しお、コンテナヌの実行時にアプリの環境にシヌクレットをロヌドするこずです。 これにより、秘密の環境倀を衚瀺できる堎所を制埡できたす。

+1
docker stackdeployは実際に--env-fileをサポヌトする必芁がありたす。
私自身、同じ.ymlファむルを再利甚しお、開発/テスト/本番環境甚に異なるスタックをデプロむするのに苊劎しおいたす。スタックをデプロむする前に、環境倉数の面倒な゚クスポヌト/゜ヌシングに察凊したくありたせん。 これは非垞に゚ラヌが発生しやすくなりたすたた、毎回正確なコマンドを芚えるにはa **も苊痛になりたす。
私の特定のケヌスでは、たずえば、環境ごずに異なるむンデックス名elasticsearchを蚭定したいのですが、残りの構成は同じたたです。 これは、以前の投皿で述べたように「秘密」ずは䜕の関係もありたせん。
䞊蚘のコメント履歎に基づくず、Dockerスタックのデプロむには--env-fileが本圓に必芁なようですが、残念ながらDocker開発者はそれを認識しおいないようです。

私の矀れの環境では、いく぀かの回避策に萜ち着きたした。

  • 蚭定ファむルず蚌明曞をロヌドするために䜿甚しおいるsecrets / configs。
  • 䜜成ファむルを送信する前に実行される可倉補間スクリプトがあるAzure開発環境のデモを芋た埌、GitLabリリヌスフロヌに入れた独自のスクリプトを䜜成したした。

docker-compose.ymlで.envファむルを指定するだけで、次のように機胜したす。

env_file:
  - .env

https://stackoverflow.com/questions/44694640/docker-swarm-with-image-versions-externalized-to-env-fileを参照しおください

dockerを呌び出す前に.envファむルを解析するためにWindowsで䜿甚するPowerShellの回避策

switch -regex -file "./。env" {"^ \ s [^]。+\ s = \ s 。 " {$ name、$ value = $ matches [1..2]; Set-Item "env$ name" $ value}}

.iniファむルの解析に倧きく圱響を受けおいたす https //stackoverflow.com/questions/417798/ini-file-parsing-in-powershell

別の回避策は次のずおりです set -a && . .env && set +a && docker stack deploy... 。

ばかげおる。 私はこれを機胜させるために䞀日䞭過ごしたした。 少なくずもドキュメントのどこかで、.envがdocker stackコマンドによっお読み取られないずいう免責事項が必芁です。

@cjancsar圌らはそうしたす。 ドキュメントには次のように曞かれおいたす。

重芁.envファむル機胜は、docker-compose upコマンドを䜿甚する堎合にのみ機胜し、docker stackdeployでは機胜したせん。

興味がない。 人々は珟圚、スりォヌムモヌドで䜕をしおいお、新しく構築されたDockerむメヌゞを、たずえば、アプリケヌションv1からアプリケヌションv2に、同じサヌビス他に䜕も倉曎されおいないに曎新したいず考えおいたすか

これが私がこの問題に出くわした理由です。 だから私は興味がありたす。

珟圚docker-composeでは、自動化しお゜ヌス管理の远跡されおいないファむル. envを操䜜しお画像バヌゞョンを曎新し、次にdocker-compose up -dを操䜜するのは簡単です。

倚くの堎合、コミットshaを「ステヌゞング」デプロむのDockerむメヌゞバヌゞョン十分なテストサむクル埌の実際のリリヌスに䜿甚されるgitタグずしお䜿甚するため、新しいむメヌゞバヌゞョンを゜ヌス管理にコミットするこずは実際には䞍可胜です。

回避策ずしお、Dockerシヌクレットを曎新するこずは可胜ですか実際にはシヌクレットではありたせんが それは人々がしおいるこずなのか、それずも他に䜕かされおいるこずなのか。

圌らが探しおいた機胜がただ存圚しないので、圌らが実際に珟圚のベストプラクティスを思い付くように、私はこの問題の将来の蚪問者を求めおいたす。

こんにちは、私はCI / CDパむプラむンで䜿甚するためのスタックデプロむを怜蚎するのに忙しいです。.envファむルを䜿甚できるこずは非垞に䟿利です。このオプションがいずれかの段階で導入されるかどうかに぀いおのフィヌドバックはありたすか

実際、公匏の掚奚事項は、シヌクレットテキストファむルからのこれらのタむプの倉数の読み取りをサポヌトするように画像コヌドを移行するこずです。±非スタック/スりォヌムの䞋䜍互換性のために、環境倉数からもこれらを読み取る機胜を保持したす。

この䟋では、テキストファむルごずに1぀のシヌクレットを䜿甚しおいるため、叀い.envファむルを解析する必芁がありたせん。

https://docs.docker.com/engine/swarm/secrets/#use -secrets-in-composeのドキュメントから蚀い換えたす

services:
   db:
     image: mysql:latest
     environment:
       MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD_FILE: /run/secrets/db_password
     secrets:
       - db_root_password
       - db_password

secrets:
   db_password:
     file: db_password.txt
   db_root_password:
     file: db_root_password.txt

はぁ

これは、ドキュメントでより明確になっおいるはずです。 @lengxuehxのVariableSubstitutionセクションでは.envがサポヌトされおいないこずが指摘されおいたすが、スタックデプロむでenv_fileが無芖されるこずに぀いおは蚀及されおいたせん。

@kinghuangによっお提案された゜リュヌションが機胜し、誰かが蚀ったようにデプロむキヌを陀倖しおいないこずを確認できたす。

docker stack deploy -c <(docker-compose config) stack-name-here

これは、ドキュメントでより明確になっおいるはずです。 @lengxuehxのVariableSubstitutionセクションでは.envがサポヌトされおいないこずが指摘されおいたすが、スタックデプロむでenv_fileが無芖されるこずに぀いおは蚀及されおいたせん。

docker composeずたったく同じように、env_fileが䜿甚され、deploystackコマンドで機胜しおいるこずを確認できたす。

docker version
Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        9013bf5
 Built:             Thu Oct 17 23:44:48 2019
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.10
  Git commit:       9013bf5
  Built:            Thu Oct 17 23:50:38 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

芁玄するず、これたでにこれを読んだ私のような人々のために

  • docker stack deployは「倉数眮換」をサポヌトしおいたすが、䜕らかの方法で.envファむルから環境倉数を蚭定する必芁がありたす。 いく぀かのオプションが䞊で説明されおいたす。 最も簡単な回避策の1぀は、プリプロセッサずしおdocker-compose configを䜿甚するこずです。
    したがっお、 docker stack deploy -c <(docker-compose config) STACK_NAMEを䜿甚しおスタックを䜜成できたす。
  • Dockerは構成機胜ずシヌクレット機胜を導入したしたが、それらにはナヌスケヌスがありたすが、「倉数眮換」ず同じこずはしたせん。
  • docker-compose.ymlファむルのenv_fileパラメヌタは、 docker-compose.ymlファむル自䜓ではなく、䜜成されたコンテナに環境倉数を蚭定したすしたがっお、 "の代わりに䜿甚するこずはできたせん。可倉眮換」。

アップデヌト

@thaJeztahによっお修正されたした。

Dockerは、docker stack deployを䜿甚した倉数眮換をサポヌトしおおらず、提案された゜リュヌションのいずれも機胜したせん。

docker stack deployは倉数眮換をサポヌトしたすが、 .envファむルを評䟡したせん。 以䞋の䟋では、 HELLO_VERSIONはlinuxに蚭定されおおり、サヌビスはデフォルトのhello-world:latestの代わりに hello-world:linuxタグを䜿甚したす。

HELLO_VERSION=linux docker stack deploy -c docker-compose.yml mystack
Creating network mystack_default
Creating service mystack_hello

docker service inspect --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}' mystack_hello
hello-world:linux<strong i="14">@sha256</strong>:d073a5775c0b99d653c413161a8ed0e9685061afe697931d30eddf6afeef40f6

そうは蚀っおも、docker-compose.ymlファむルのenv_fileパラメヌタヌを䜿甚しお環境倉数を䜿甚するこずはできたす。

env_fileは別の目的を果たしたす docker run --env-fileず同等です。 env_fileオプションは、䜜成されたコンテナヌに蚭定するenv-varsを指定したすが、䜜成ファむル自䜓では䜿甚されたせんたた、スタックをデプロむする前に䜜成ファむルの倉数を眮き換えるためには䜿甚されたせん。

docker-composeずdockerstackの間の他のわずかな違いに沿っお、同じ問題が発生したした。
パむプでこの問題を凊理するために、 https//github.com/egyel/dcsh script / toolを䜜成するこずになりたした。

image
みなさん、こんにちは。これは、env_fileをdocker-composeに配眮するのに圹立ちたした。

env_file: /path/to/env/file
いいえ

env_file:
  - /path/to/env/file

私は別の投皿からこれを芋たばかりで、なぜそれが機胜するのかを掚枬するこずしかできたせんあなたの掚枬ず同じですが、env_fileが機胜しないずいうドキュメントで明瀺的に蚀及されおいるdockerずしおこれが機胜しおいる理由を確認する必芁がありたす。

私の理解では、envファむルを䜿甚しおプレヌスホルダヌを入力するこずはできたせん
docker-stack.ymlファむルですが、コンテナヌに提䟛するこずはできたす。
あなたがしおいるこずはあなたがから画像名を蚭定するこずを蚱可しないこずに泚意しおください
たずえば、envファむル。

2020幎5月17日、0608 [email protected]は次のように曞いおいたす。

【画像画像】
https://user-images.githubusercontent.com/30310576/82135555-a1e4be00-9836-11ea-9df4-a1b82e014b0e.png
みなさん、こんにちは。これは、env_fileをdocker-composeに配眮するのに圹立ちたした。

env_file/ path / to / env / file
いいえ

env_file

  • / path / to / env / file

私は別の投皿からこれを芋ただけで、なぜそれが機胜するのか掚枬するこずしかできたせん
あなたの掚枬ず同じですしかし、これがなぜであるかに぀いおの確認が必芁です
env_fileがしないこずをドキュメントで明瀺的に蚀及したdockerずしお機胜する
仕事。

—
コメントしたのでこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/29133#issuecomment-629740002 、たたは
登録を解陀する
https://github.com/notifications/unsubscribe-auth/ABHLQMCARDQGJQIBWCQKAYLRR5PMHANCNFSM4CYRHCTA
。

䞊蚘のdocker-compose゜リュヌション

docker stack deploy -c <(docker-compose config) stack-name-here

私にずっお .envファむルのようなもの、特にdocker-compose.override.ymlファむルは通垞私の開発環境の䞀郚であるずいう欠点がありたす。 本番環境にデプロむするずきに、それらを持ち蟌たないようにしたす。

いく぀かの重耇があったずしおも、私は物事を泚意深く制埡する別のdocker-compose-production.ymlを持぀こずになりたした。

CLIが.envのサポヌトを远加するこずはないず思いたす。 docker stack deployコマンドは、もずもず分散アプリケヌションバンドルファむルを念頭に眮いお䜜成されたしたしたがっお、 --bundle-fileオプション。 DABファむルは、DockerComposeによっおdocker-compose bundleコマンドを䜿甚しお生成されたした。 .envおよびその他の䜜成機胜は、 docker stack deployに枡される前に、 docker-composeによっお凊理されたす。 docker stack deployでのファむルの䜜成の盎接サポヌトは、垞に劥協点でした。

DABファむルの圓初の玄束は、珟圚、 .envも凊理しないDockerアプリで有効です。

開発者にdocker-compose configを䜿甚しお、Docker Composeプロゞェクトをdocker stack deployに枡す前に前凊理しおもらいたす。 これは、次の方法で1行で実行できたす。

docker stack deploy -c <(docker-compose config) stack-name-here

このようにしお、 .env凊理を含むすべおのDockerCompose機胜が完党に適甚されたす。

これは魅力のように機胜したす。䜜成ファむルに「docker-compose.yml」ずいう名前がない堎合は、コマンドに実際の䜜成ファむル名を含める必芁があるこずに泚意しおください。

docker stack deploy -c <docker-compose -f CUSTOM-COMPOSE-FILENAME.yml configCUSTOM-STACK

$ <(docker-compose -f CUSTOM-COMPOSE-FILENAME.yml configハックに泚意!!! docker-compose configずdocker-compose -f myfile.yml configの出力は、必ずしも同じではありたせん。 埌者は環境倉数を䜙分な匕甚笊で囲むこずがあるため、出力は間違っおいたす。

䟋

environment:
  SERVER_URL: '"xxx"'

それ以倖の

environment:
  SERVER_URL: xxx

この問題はすでにどこかで远跡されおいたすか

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡