docker-compose.yml
ファイルがあり、ターミナルではtyping docker-compose up [something]
ですが、docker-compose.yml
にも引数を渡したいです。これは可能ですか?補間変数について読んで、.yml
を使用して${testval}
ファイルに変数を指定しようとしましたが、docker-compose up [something] var="test"
を使用しましたが、次のエラーが表示されます。
警告:testval変数は設定されていません。デフォルトは空の文字列です。
エラー:そのようなサービスはありません:testval=test
dnephin answer に基づいて、これを作成しました sample repo docker-compose upに変数を渡すことができます。
使い方は簡単です:
TEST= docker-compose up
を使用して、app
とdb
コンテナの両方を作成して起動します。これで、APIがポート3030のdockerデーモンで実行されているはずです。TEST=DO docker-compose up
を使用して、app
とdb
コンテナの両方を作成して起動します。 APIはnpm run test
ファイル内でpackage.json
を実行する必要があります。$env:TEST="";docker-compose up
を使用して、app
とdb
コンテナの両方を作成して起動します。これで、APIがポート3030のdockerデーモンで実行されているはずです。$env:TEST="do";docker-compose up
を使用して、app
とdb
コンテナの両方を作成して起動します。 APIはnpm run test
ファイル内でpackage.json
を実行する必要があります。環境変数として変数を渡す必要があります。
testvar=test docker-compose up ...
または
export testvar=test
docker-compose up
ここで何をしたいのかわかりませんが、環境変数を特定のコンテナに渡すことが必要な場合、docker-compose.ymlでそれを行うことができます:
web:
...
environment:
- Rails_ENV=production
- VIRTUAL_Host=www.example.com
- VIRTUAL_PORT=3011
この変数は、指定したコンテナに固有のものであり、コンテナ間で共有されません。
また、「docker-compose up」は引数を取りません。
docker-compose
引数を渡すためにフラグやコマンドを含めないでください。
Composeは主に、イメージを構築するのではなく、サービスを実行するためのツールです。引数には、すべてのdockerfileで定義されているARG
を使用してみてください。
すべてのユニークなビルドシナリオをサポートすることはできません。なぜならdocker-compose
はその目的のために設計されていません。実際にサポートできるのは、最も一般的なビルドシナリオのみです。
彼のトピックに関する詳細情報を見ることができます こちら 。
docker-compose build --build-arg app_env=production
を使用して、イメージを構築できます。その後、docker-compose up
を使用できます。これは、ビルドされたイメージに添付されます。
# docker-compose.yml
services:
service_name:
build:
context: .
args:
- app_env=development
....
# Dockerfile
...
ARG app_env
ENV RACK_ENV $app_env
RUN if [ ${APP_ENV} = production ]; run command; else run another command; fi
...
次に、コマンドラインに次のように入力します
docker-compose build --build-arg app_env=production
docker-compose up