Я пытаюсь интегрировать Dockerize между Elasticsearch и SQL Server через Logstash.Я создал свой собственный файл Docker, чтобы иметь возможность использовать его в любой среде, и он выглядит следующим образом:
FROM logstash:6.5.0
#switch to root user
USER root
#arguments
ARG dbHost=foo
ARG dbName=foo
ARG dbUser=foo
ARG dbUserPassword=foo
ARG elasticHost=www.google.com
ARG dbTable=foo
ARG elasticIndex=foo
ARG shardNum=foo
ARG replicasNum=foo
#host where database is located
ENV dbHost ${dbHost}
#database name
ENV dbName ${dbName}
#database user
ENV dbUser ${dbUser}
#database user password
ENV dbUserPassword ${dbUserPassword}
#host where Elasticsearch is located
ENV elasticHost $elasticHost
#table to log
ENV dbTable ${dbTable}
#index name
ENV elasticIndex ${elasticIndex}
#number of shards
ENV shardNum ${shardNum}
#number of replicas
ENV replicasNum ${replicasNum}
RUN usermod -a -G root logstash
#copying jar for sql server into /bin/jdbc directorys
COPY ./sqljdbc42.jar /bin/jdbc/
#adding system variable CLASSPATH for sqljdbc
CMD ["echo 'export CLASSPATH="/bin/jdbc/sqljdbc42.jar"' >> /root/.bashrc"]
#creating Elasticsearch index for SQL Server logs
RUN echo $(curl -XPUT --silent '${elasticHost}/${elasticIndex}' -d '{"settings" : {"index" : {"number_of_shards" : ${shardNum}, "number_of_replicas" : ${replicasNum}}}}')
#setting working directory
WORKDIR /bin/jdbc
#configuring LogStash configuration file
RUN echo "input {" >> sql.conf
RUN echo " jdbc {" >> sql.conf
RUN echo " jdbc_connection_string => "jdbc:sqlserver://${dbHost};databaseName=${dbName};db_username=${dbUser};db_password=${dbUserPassword}"" >> sql.conf
RUN echo " jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"" >> sql.conf
RUN echo " jdbc_user => ${dbUser}" >> sql.conf
RUN echo "" >> sql.conf
RUN echo " statement => "select * from $dbTable"" >> sql.conf
RUN echo " }" >> sql.conf
RUN echo "}" >> sql.conf
RUN echo "" >> sql.conf
RUN echo "output {" >> sql.conf
RUN echo " elasticsearch {" >> sql.conf
RUN echo " hosts => ["${elasticHost}"]" >> sql.conf
RUN echo " index => "${elasticIndex}"" >> sql.conf
RUN echo " }" >> sql.conf
RUN echo "}" >> sql.conf
RUN chown --recursive logstash /usr/share/logstash/bin/logstash
USER logstash
ENTRYPOINT ["/usr/share/logstash/bin/logstash", "-f", "/bin/jdbc/sql.conf", "-l", "logstash.log"]
И я создал и поместил изображение в свой личный репозиторий Docker.Я пытаюсь запустить этот образ с помощью docker compose вместе с SQL Server, Elasticsearch и Kibana.Цель состоит в том, чтобы отобразить результат « select * from » в Kibana.Мой файл docker-compose выглядит следующим образом:
version: '3.4'
services:
elasticsearch:
image: "elasticsearch:6.5.0"
environment:
- "discovery.type=single-node"
ports:
- "9200:9200"
- "9300:9300"
container_name: elasticsearch
networks:
- random-network
sql_server:
image: "mcr.microsoft.com/mssql/server:2017-latest"
environment:
- "ACCEPT_EULA=Y"
- "SA_PASSWORD=RandomPassword"
ports:
- "1400:1433"
container_name: apprrr-dev
networks:
- random-network
kibana:
image: "elastic/kibana:6.5.0"
ports:
- "5601:5601"
container_name: kibana
environment:
- "ELASTICSEARCH_URL=http://elasticsearch:9200"
networks:
- random-network
depends_on:
- elasticsearch
elasticsqlserver:
image: "localhost:5000/ryukote2/elasticsqlserver:1.0.0"
environment:
- "dbHost=sql_server:1400"
- "dbName=RandomDB"
- "dbUser=sa"
- "dbUserPassword=RandomPassword"
- "elasticHost=http://elasticsearch:9200"
- "dbTable=RandomTable"
- "elasticIndex=TestIndex"
- "shardNum=1"
- "replicasNum=1"
networks:
- random-network
depends_on:
- sql_server
- elasticsearch
networks:
random-network
driver: bridge
Все службы запускаются нормально, и служба " elasticsqlserver " завершается с ошибкой:
elasticsqlserver_1 |ОШИБКА: неизвестная команда '/ bin / sh' elasticsqlserver_1 |elasticsqlserver_1 |Смотрите: 'bin / logstash --help' elasticsqlserver_1 |[ОШИБКА] 2019-03-05 12: 58: 13.988 [main] Logstash - java.lang.IllegalStateException: Logstash остановил обработку из-за ошибки: (SystemExit) выход random-network_elasticsqlserver_1, завершившийся с кодом 1
Я нигде не могу найти причину этой ошибки и как решить эту проблему.Мой dockerfile нигде в тексте не содержит « / bin / sh ».
Я не удивлюсь, если это что-то тривиальное.