web-dev-qa-db-ja.com

「%s」ではなく「prefix_%s_1」という名前のdocker-composeイメージ

リンクのあるdocker-compose.yamlファイルにいくつかのDockerコンテナーを設定すると、コンテナーの名前はprefix_%s_1ではなく%sという形式になり、/etc/hostsリンクコンテナは同じです。

redisの代わりにredisコンテナtest_redis_1のエイリアスはなぜですか?

関連するファイルと出力は次のとおりです。

# docker-compose.yaml
monkey:
    build: ../../monkey
    dockerfile: test.Dockerfile
    links:
      - redis:redis
    ports:
      - "9006:9006"

redis:
    build: ../storage/redis
    ports:
      - "6379:6379"

docker-compose build && docker-compose upを実行した後:

$ docker-compose ps
Name           Command                        State  Ports
---------------------------------------------------------------------------
test_redis_1   redis-server /usr/local/et ...   Up   0.0.0.0:6379->6379/tcp
test_monkey_1  python -m SimpleHTTPServer ...   Up   0.0.0.0:9006->9006/tcp

test_monkey_1コンテナからの出力:

Step 14 : RUN cat /etc/hosts
 ---> Running in 1c104e3d9bf5
172.17.1.26     75a485df1325
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.1.26     thirsty_lumiere.bridge
172.17.0.220    test_redis_1
172.17.0.220    test_redis_1.bridge
172.17.1.26     thirsty_lumiere
 ---> 3a06bac9b3ca
Removing intermediate container 1c104e3d9bf5
Step 15 : RUN echo
 ---> Running in a1c5b5f8ae0f

 ---> 385c9ee44332
Removing intermediate container a1c5b5f8ae0f
Step 16 : RUN ifconfig eth0 | grep inet addr
 ---> Running in 17cd638c6473
          inet addr:172.17.1.28  Bcast:0.0.0.0  Mask:255.255.0.0
 ---> 21235e29abc1
Removing intermediate container 17cd638c6473
Step 17 : RUN echo
 ---> Running in 8c0b1db2a69b

 ---> e2dd190eb4d1
Removing intermediate container 8c0b1db2a69b
Step 18 : RUN env
 ---> Running in 50cd1b6bf9da
HOSTNAME=75a485df1325
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/data/web/tunnelbear.com/play/tPWD=/data/web/tunnelbear.com/root
_=/usr/bin/env
22
Neil

docker compose issue#745 によると:

デフォルトでは、Composeはプロジェクトの名前を、composeコマンドが実行されるディレクトリのbasenameに基づいています。プロジェクト名は、各コマンドに-p/--project-nameオプションを渡すか、COMPOSE_PROJECT_NAME環境変数を設定することによってオーバーライドできます。

次のように記述することで、選択したプレフィックスをコンテナ名に設定できます。

$ docker-compose -p MY_PROJECT_NAME

これは(より読みやすい)と同等です。

$ docker-compose --project-name MY_PROJECT_NAME
20
Arnaud Leymet

container_nameを使用して、コンテナー名を任意に設定できます。

redis:
    build: ../storage/redis
    container_name: redis
    ports:
      - "6379:6379"

また、コンテナのホスト名はhostnameで設定することもできます。

12
Hongbo Liu

Docker composeは、 -pオプション を使用して設定しない限り、プロジェクトの名前として構成ファイルのあるディレクトリの名前を使用します

-p, --project-name NAME     Specify an alternate project name (default: directory name)

Composeは、docker-composeコマンドが実行されるフォルダー(現在の作業ディレクトリ)に配置された 。envという名前の環境ファイルのデフォルト環境変数 の宣言をサポートしています。

設定する場所 COMPOSE_PROJECT_NAME

9
denov

これが、docker-composeがコンテナーを管理できるようにコンテナーに名前を付ける方法です。

Basenameは、docker-compose.yamlファイルを含むディレクトリの名前です。これには、docker-compose.yamlファイルで指定されたコンテナーの名前が続き、最後にdocker-compose scaleのようなものを使用してコンテナーの複数のインスタンスを起動すると増加するインスタンス番号が続きます。

この命名スキームは、docker-compose stopなどを使用してコンテナーを操作しようとしたときにdocker-composeがコンテナーを識別する方法です。

これがドキュメントと矛盾することはないと思います。つまり、たとえば、sotestという名前のディレクトリにあるこのdocker-compose.yamlで始まる場合:

irc:
  image: docker.io/xena/elemental-ircd
  links:
    - web

web:
  image: larsks/thttpd

そして、コンポーズを表示します。

$ docker-compose up

2つのコンテナーを取得します。

CONTAINER ID        IMAGE                           ...NAMES
960c1491c03e        docker.io/xena/elemental-ircd   ...sotest_irc_1
422bba313e71        larsks/thttpd                   ...sotest_web_1

/etc/hosts内のsotest_irc_1ファイルを見ると、次のことがわかります。

172.17.0.28 web 422bba313e71 sotest_web_1

他の多くの名前に加えて。したがって、リンクされたホストは、ドキュメントで説明されているように名前で使用できます。

5
larsks