Поместите их в одну сеть и используйте имена контейнеров в качестве имен хостов:
docker network create foo
docker run --network=foo --name mysqlcontainer -d mysql-img
docker run --network=foo --name javacontainer -d java-img
Не открывать порты - они автоматически отображаются между контейнерами внутри сети.
Для подключения внутри используйте mysqlcontainer:3306
и javacontainer:9090
.
Для подключения с хоста вам понадобится выставить порт.
Если бы Вы находитесь на поле с командой xsltproc на месте, я предложил бы, чтобы Вы использовали XSLT для этого.
Для решения для Perl я пошел бы для использования DOM. Проверьте этот DOM, Обрабатывающий со статьей Perl.
Это сказало. Если Ваш XML-файл производится предсказуемым способом, что-то наивное как следующее могло бы работать:
perl -pe 's#(<VALUE DECIMAL_VALUE=")([0-9.]+)(" UNIT_TYPE="percent"/>)#"$1" . ($2 + 0.4) . "$3"#e;'
Это берет вход на stdin, выводах к stdout:
while(<>){
if( $_ =~ /^(.*DECIMAL_VALUE=\")(.*)(\".*)$/ ){
$newVal = $2 + 0.04;
print "$1$newVal$3\n";
}else{
print $_;
}
}
Если Вы абсолютно уверены, что формат Вашего XML никогда не будет изменяться, что порядок атрибутов фиксируется, который можно действительно получить, regexp для права числа... затем идут для основанного на несинтаксическом анализаторе решения.
Лично я использовал бы XML:: Ветка (возможно, потому что я записал это;-). Это обработает XML как XML, все еще уважение исходного формата файла, и не загрузит все это в памяти прежде, чем начать работать.
Непротестированный код ниже:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
XML::Twig->new( # call the sub for each VALUE element with a DECIMAL_VALUE attribute
twig_roots => { 'VALUE[@DECIMAL_VALUE]' => \&upd_decimal },
# print anything else as is
twig_print_outside_roots => 1,
)
->parsefile_inplace( 'foo.xml');
sub upd_decimal
{ my( $twig, $value)= @_; # twig is the XML::Twig object, $value the element
my $decimal_value= $value->att( 'DECIMAL_VALUE');
$decimal_value += 0.4;
$value->set_att( DECIMAL_VALUE => $decimal_value);
$value->print;
}
Что-то сродни следующему будет работать. Этому, возможно, понадобится тонкая настройка, если существует дополнительный интервал, но это оставляют как осуществление для читателя.
function update_after(in_string, locate_string, delta) {
local_pos = index(in_string,locate_string);
leadin = substr(in_string,0,local_pos-1);
leadout = substr(in_string,local_pos+length(locate_string));
new_value = leadout+delta;
quote_pos = index(leadout,"\"");
leadout = substr(leadout, quote_pos + 1);
return leadin locate_string new_value"\"" leadout;
}
/^ *\<VALUE/{
print update_after($0, "DECIMAL_VALUE=\"",0.4);
}
вот gawk
awk '/DECIMAL_VALUE/{
for(i=1;i<=NF;i++){
if( $i~/DECIMAL_VALUE/){
gsub(/DECIMAL_VALUE=|\042/,"",$i)
$i="DECIMAL_VALUE=\042"$i+0.4"\042"
}
}
}1' file