2015-10-09 11 views
8

Po skonfigurowaniu kilku kontenerów Docker w pliku docker-compose.yaml z łączami, nazwa kontenerów kończy się na formacie prefix_%s_1 zamiast %s , a alias w /etc/hosts na kontenerze łączącym jest taki sam.Obraz dokowania: "prefix_% s_1" zamiast "% s"

Dlaczego zamiast nazwy redis podano kontener test_redis_1 zamiast redis?

Oto odpowiednie pliki i wyjście:

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

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

Po wykonaniu 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 

Wyjście z pojemnika 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 

Odpowiedz

1

to tylko jak doker-compose wymienia pojemniki, aby mógł zarządzać nimi.

Nazwa bazy jest nazwą katalogu zawierającego plik docker-compose.yaml. Następnie podana jest nazwa kontenera podana w pliku docker-compose.yaml, po czym następuje numer instancji, który zwiększa się, jeśli wyświetlasz wiele instancji kontenera, używając czegoś takiego jak docker-compose scale.

Ten schemat nazewnictwa określa, w jaki sposób funkcja docker-compose może identyfikować pojemniki podczas próby działania na nich przy użyciu czegoś takiego, jak docker-compose stop.

Nie sądzę, aby to było w jakikolwiek sposób sprzeczne z dokumentacją. Oznacza to, że jeśli zacznę z, powiedzmy, to docker-compose.yaml w katalogu o nazwie sotest:

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

web: 
    image: larsks/thttpd 

A potem przywołać Compose:

$ docker-compose up 

mam dwa pojemniki:

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

Jeśli spojrzę na plik /etc/hosts wewnątrz sotest_irc_1, widzę:

172.17.0.28 web 422bba313e71 sotest_web_1 

Oprócz wielu innych nazw. Łączony host jest dostępny pod nazwą zgodnie z opisem w dokumentacji.

+0

nie robi tego konfliktu z tego, co mówi dokumentacja? (https://docs.docker.com/compose/yml/#links). Plik '/ etc/hosts' w przykładzie dokumentu ma'% s' zamiast 'prefix_% s_1'. – Neil

+0

Nie wiem; na którą część dokumentacji się patrzysz? – larsks

+0

Zaktualizowałem swój komentarz za pomocą linku. – Neil

3

Według docker compose issue #745:

Domyślnie Tworzenie baz nazwę projektu na bazowej nazwy katalogu komponować polecenia są uruchamiane z. Nazwa projektu może być zastąpiona przez podanie opcji -p/--project-name dla każdej komendy lub ustawienie zmiennej środowiskowej COMPOSE_PROJECT_NAME.

Można ustawić prefiks swojego wyboru do nazwy kontenerowych pisząc coś takiego:

$ docker-compose -p MY_PROJECT_NAME 
+0

Próbowałem -pparam i nie działało 'docker-compose -p '' up -d' - chcę je ustawić puste –

+0

Ale to zadziała' docker-compose -p 'somePrefix' up -d' ie nie jest pustą wartością tylko –

3

Docker skomponować użyje nazwy katalogu z plikiem redagowania jak nazwa projektu chyba że ustawisz jeśli za pośrednictwem -p option

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

Compose obsługuje deklarując default environment variables in an environment file named .env umieszczony w folderze, w którym polecenie doker-komponować jest wykonywany (prąd roboczy d poprawka).

gdzie chcesz ustawić COMPOSE_PROJECT_NAME

Powiązane problemy