gpt4 book ai didi

Tomcat 手动设置 - Docker

转载 作者:行者123 更新时间:2023-11-28 23:57:25 25 4
gpt4 key购买 nike

我已经开始学习 docker 并且很难手动设置 tomcat 容器。这个想法是手动创建一个图像,然后将这些步骤翻译成一个 docker 文件。列出到目前为止执行的步骤。

     Using aws EC2 Centos micro instance for learning docker
Docker daemon is up and running
Docker usergroup has also been setup and I run docker as normal user
Installed oracle JDK as below:
wget --no-cookies --no-check-certificate --header "Cookie:\
gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; \
oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.rpm'
Installed tomcat using yum ( Have tried manual method using the gz file also but did not help ):
yum install tomcat.noarch tomcat-admin-webapps.noarch tomcat-webapps.noarch
Edited "/etc/tomcat/tomcat.conf" to add /usr/java/latest as JAVA_HOME
Committed the changes to container:
docker commit 42b0beb497f9 $USER/tomcat_install
docker run -d -p 8080:8080 $USER/tomcat_install /usr/sbin/tomcat start -D FOREGROUND
Output: SHA Checksum

但是容器退出并给出以下错误:

      `enter code here /usr/sbin/tomcat: line 21: .: /etc/sysconfig/: is a directory`

经过相关搜索我发现这个错误是因为open jdk而不是oracle jdk。如上,我开始使用oracle jdk。

请注意:由于我正在学习,我不想下载官方的tomcat镜像并使用它,因为它太容易了。虽然为了比较我确实下载了那个图像但仍然无法解决问题。解决这个问题并拥有我自己的 tomcat 图像的一些建议会很棒

最佳答案

我今天遇到了同样的问题。这是我发现的:如果您查看/usr/sbin/tomcat,您会发现它在第 21 行附近需要 $NAME="tomcat"

# Get instance specific config file
if [ -r "/etc/sysconfig/${NAME}" ]; then
. /etc/sysconfig/${NAME}
fi

这是加载/etc/sysconfig/tomcat 所必需的。它还需要在第 39 行开始的语句中 $CATALINA_BASE="/usr/share/tomcat"

    if [ "$1" = "start" ]; then
${JAVACMD} $JAVA_OPTS $CATALINA_OPTS \
-classpath "$CLASSPATH" \
-Dcatalina.base="$CATALINA_BASE" \
-Dcatalina.home="$CATALINA_HOME" \
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
-Djava.util.logging.config.file="${CATALINA_BASE}/conf/logging.properties" \
-Djava.util.logging.manager="org.apache.juli.ClassLoaderLogManager" \
org.apache.catalina.startup.Bootstrap start \
>> ${CATALINA_BASE}/logs/catalina.out 2>&1 &
if [ ! -z "$CATALINA_PID" ]; then
echo $! > $CATALINA_PID
fi

因此它可以知道将日志文件catalina.out 写到哪里。所以,我所做的是定义两个变量(在您的 Dockerfile 中很容易做到)

NAME="tomcat"
CATALINA_BASE="/usr/share/tomcat"

在/etc/tomcat/tomcat.conf 中,我可以手动启动 tomcat

[root@tomcat tomcat]# ps -ef|grep tomcat
root 352 1 8 13:09 ? 00:00:01 /usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
root 372 1 0 13:09 ? 00:00:00 grep --color=auto tomcat
[root@tomcat tomcat]#

这是正确的方法吗?我不知道,但它有效。

我在 http://unixwars.blogspot.com/2016/07/starting-tomcat-manually-in-docker.html 放了这个答案的较长版本如果你很好奇。不过,我希望这个回复中的内容足够了。

关于Tomcat 手动设置 - Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38450018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com