2015-10-08 20 views
20

Ben tam bir gelişme yığını oluşturmak üzere liman işçisi-oluşturma deneyimini kullanıyorum.Docker-container'ı kullanarak docker konteynerlerini birbirine bağlarken IP adresleri nasıl kullanılır?

uygulama çalışmak için bir MySQL sunucusu ihtiyacı var.

my-application: 
    build: . # the Dockerfile resides in the current folder 
    ports: 
     - "9180:80" 
     - "9543:443" 
    external_links: 
     - mysql_mysql_1:mysql 
environment: 
    DOCKER_ENVIRONMENT: dev 
    DB_NAME: local_db 
    DB_PASS: password 
    DB_USER: root 
    DB_HOST: # how to set the mysql's IP address? 

Ben geçemez:

mysql: 
    image: mysql:5.6 
    volumes: 
     - /data/mysql:/var/lib/mysql 
     - ./docker/mysql.d:/etc/mysql/conf.d 
    ports: 
     - "3306:3306" 
    environment: 
     MYSQL_ROOT_PASSWORD: password 

uygulama kendi liman işçisi-compose.yml ve referanslar MySQL konteyner vardır:

mysql server liman işçisi-oluşturmadeneyimine tarafından harici konteyner kurulumdur Bunları docker-oluştururken dinamik olarak.

application-container$ env|grep ADDR 
    MYSQL_PORT_3306_TCP_ADDR=172.17.0.241 

Oysa bu benim DB_HOST gerekli değildir: Belirli belirlenen değişkenleri olduğu gibi

Ben, uygulama mysql IP adresinin farkında olduğunu biliyoruz.

Ben DB_HOST için nasılsa değişkeni haritalayabilir ya da farklı olarak ayarlayın?

+1

Neden mysql server harici liman işçisi-composer.yml dosyada mı? Bu gerçekten gerekli mi? Birlikte çalıştırmak için gereken konteynerle uygulamalar varsa Genellikle, sadece bir liman işçisi-composer.yml yapılandırmak zorundayız. – nessuno

+0

@nessuno Birden fazla proje için bu mysql kapsayıcısını kullanmak istiyorum. Etrafta uçan 12 mysql sunucuya ihtiyacım yok.Ayrıca, mysql veritabanını oldukça masif hale gelebileceğinden, mysql verilerini '/ data/mysql'de bulunan büyük bir HDD'ye eşleştiriyorum. Aynı klasöre eşlenmiş birden çok mysql örneğiniz varsa, fileysystem kilit sorunlarına yol açacaktır. – k0pernikus

+1

Mysql kapsayıcı yapılandırmasını uygulamanızla birlikte koyabilirsiniz, sadece docker-compose'u '--no-recreate 'bayrağıyla çalıştırmanız yeterlidir, sanırım. Bundan sonra, yalnızca bir tane mysql konteyneriniz var ve bu kapsayıcıyı, adını kullanarak docker-compose.yml dosyasına doğrudan başvurabilirsiniz. Böylece 'DB_HOST: mysql' yapın. – nessuno

cevap

24

IP'yi ayarlamak zorunda değilsiniz, ancak içeriğin sanal anasistem adı'a başvuruda bulunabilirsiniz ve bu, bağlantılı kapsayıcınızı adlandırdığınız değere eşittir.

Eğer liman işçisi konteyner bağlandığınızda olarak
your_application: 
    build: . 
    ports: 
     - "9180:80" 
     - "9543:443" 
    external_links: 
     - mysql_mysql_1:docker-mysql 
    environment: 
     DB_HOST: docker-mysql 

, kendi MySQL kaba bağlanmak olabilir:

Bu links (önerilen) veya external_links biriyle, gerçekten docker-compose.yml içinden DB_HOST ayarlayabilirsiniz gelir:

application-container $ mysql -h docker-mysql -uroot -ppassword -p 3360 

Aynı docker-composer.yml öğesinden de bağlantı oluştururken aynı şekilde çalışır.

Bu aynı zamanda documented geçerli: başka bir hizmete kaplara

bağlantı. Ya (ayrıca takma ad için kullanılacaktır) sadece hizmet adı : Ya servis adını ve bağlantı takma (ALIAS SERVİS) hem belirtin. - ayrıntılar için environment variable reference bakınız

172.17.2.186 db 
172.17.2.186 database 
172.17.2.187 redis 

Çevre değişkenleri de oluşturulacaktır:

links: 
- db 
- db:database 
- redis 

takma adıyla adıyla bir giriş bu hizmetin, mesela için konteynırların içine/etc/hosts oluşturulacak .

+2

Dikkatli olun, bugün docker-compose dosyasının 2. sürümüyle birlikte, ortam değişkeni referansı artık oluşturulmuyor. https://docs.docker.com/compose/link-env-deprecated/ adresine bakın. –

+0

@MartinGOYOT Bu doğrudur. Sürüm 2'de, konteynerler değişmiş ağlar nedeniyle kutunun dışına bağlanabilmelidir. Bir sürüm 2 örneği ekleyebilir miyim kontrol edeceğim. Eğer şimdi yaratmanın tam ortasındaysanız, 2. sürüm için de yeni bir cevap gönderebilirsiniz. – k0pernikus

+0

cevabınız sürüm 2'de iyi çalışır. Sadece bunu ile ilgili olarak söylüyordum. "Ortam değişkenleri de oluşturulacak. - Ayrıntılar için ortam değişken referansına bakınız. –

İlgili konular