簡體   English   中英

在_interactive_ docker啟動之前,docker容器似乎已經失敗了/ etc / hosts

[英]docker container seems to have failing /etc/hosts until an _interactive_ docker start

如果我在交互式終端中“docker-compose start service”(不是-it,而是以交互方式在主機上運行bash),我的服務就會愉快地初始化。

但是,如果我將相同的命令放在shell腳本中,它就會失敗。

我懷疑問題是通過/ etc / hosts進行名稱解析; 它似乎以交互方式工作,但由於某種原因不在腳本中。 我希望容器能夠看到主機的/ etc / hosts中定義的名稱。 雖然我在Linux Mint 19.1上,但我需要它在Windows,Mac和Linux上工作。

我試過的東西不起作用:

  1. 添加睡眠 - 長達10分鍾
  2. 檢查環境變量差異
  3. 在tcsh下運行命令而不是bash
  4. 使用/ usr / bin / script -c在偽tty中運行命令

但是如果我在我的腳本中拋出一個/ bin / bash -i,並且回顯說明了要鍵入的命令,它就可以了!

我正在使用:

docker version 18.09.6, build 481bc77
docker-compose version 1.24.0, build 0aa59064

我必須從我的管理層那里得到一個好的分享,而不是分享小代碼片段。

為了自動化,我希望服務通過docker-compose up -d或至少docker-compose start啟動 - 在腳本中。

容器內的錯誤消息(來自docker logs -f service)如下所示:elasticsearch.exceptions.ConnectionTimeout:ConnectionTimeout由 - ReadTimeoutError引起(HTTPConnectionPool(host = u'elasticsearch',port = 9200):讀取超時。(讀取超時) = 10))

我有時會看到彈性搜索中的高負荷,這看起來有點奇怪。 我認為8核(可能是超線程)可能高達490%。 更常見的是,它下降了大約5-15%。

這是一個SSCCE:

#!/bin/bash

set -eu
set -o pipefail
set -x

docker stop elasticsearch || true
docker-compose start elasticsearch

# Give elasticsearch some time to come up.
# Normally I use a small REST client that calls ES until it starts responding - but that wouldn't be self-contained.
sleep 120

docker stop service || true
docker-compose start service

腳本本身運行完成正常,但隨后“服務”退出應該。

謝謝!

如果我理解正確,您希望elasticsearch容器為您的service容器提供service (即兩個容器彼此聯系),因此, service容器需要知道elasticsearch的IP地址。

在這種情況下,docker-compose將管理容器地址,您需要做的是將該信息作為環境變量存儲在服務容器中。 它的優點是,你可以使用相同的命令啟動兩個容器(只是docker-compose up -d )。 例如:

services:
  elasticsearch:
      image: YOUR_ELASTICSEARCH_IMAGE
      ports:
        - 9200:9200
  service:
      image: YOUR_SERVICE_IMAGE
      environment:
          - ELASTICSEARCH_HOST=elasticsearch

如果容器之間存在依賴關系並且elasticsearch容器需要一些時間來啟動,那么您可以在啟動時在service中放置sleep語句或使用31746182中的解決方案

似乎docker-compose有時真的想要在pty上運行而不是直接/正常地從腳本運行。 我想這可能會以某種方式與我正在開始的容器的內容有關,而不是與docker本身有關。

無論如何,信不信由你,像我一樣(例如):

script -q -c "docker-compose up -d \"elasticsearch\"" /dev/null

......解決了這個問題。

很奇怪,我知道,但我目前還沒打算弄明白為什么。 我很高興它正在工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM