docker - 从Docker容器登录到主机不起作用

标签 docker docker-compose

我有一个基于微服务的应用程序,如果将它们部署在主机上,这些服务可以正常工作。但是现在,我想学习Docker,因此我开始在基于Linux的计算机上使用容器。这是一个示例Docker文件,它非常简单:

  FROM openjdk:11-jdk-slim
  MAINTAINER BeszterceKK
  COPY ./tao-elszamolas-config.jar /usr/src/taoelszamolas/tao-elszamolas-config.jar
  WORKDIR /usr/src/taoelszamolas
  ENV SPRING_PROFILES_ACTIVE prod
  EXPOSE 9001
  ENTRYPOINT ["java", "-jar", "tao-elszamolas-config.jar", "-Dlog4j.configurationFile=file:/tao-elszamolas/services/tao-config/log4j2-    prod.xml", "-DlogFileLocation=/tao-elszamolas/logs"]

我的问题是,我尝试将我的Spring Boot应用程序日志写入主机。这就是为什么我使用数据量。最后,这是我如何运行容器的命令:
docker run -d --name=tao-elszamolas-config-server --publish=9001:9001 -v /tao-elszamolas/logs:/tao-elszamolas/logs -v /tao-elszamolas/services/tao-config/log4j2-prod.xml:/tao-elszamolas/services/tao-config/log4j2-prod.xml tao-elszamolas-config:latest

但是从长远来看,所有服务都将在“docker-compose”下进行。这只是为了测试,有点像概念证明。

第一个问题是,为什么它没有将日志写入正确的位置。 (在已定义的卷之一中。)这就是我在Log4j2配置xml中设置的内容。如果我在没有Docker的本地环境中使用config XML,则一切正常。当我登录到容器时,可以看到已安装的卷,并且可以将其“cd”到其中。我也可以这样做:
touch something.txt

因此将创建文件,并且可以从容器和主机上看到该文件。我究竟做错了什么?我认为,该应用程序可以选择日志配置,因为当我仅将内部文件夹设置为日志文件的位置时,它会将东西记录在容器内。

并且我还将整个卷(及其子卷)的权限临时设置为777,以测试权限是否出了问题。但不是。任何帮助将不胜感激!

我的第二个问题是,在Linux上是否有任何基于Web的好的工具可以用来管理容器。启动它们,然后停止,等等...我用Google搜索出来,但发现有些不确定,哪一种是最基本的,最免费的,可以满足基本需求,哪一种足够安全。

最佳答案

更新:

花了几个晚上后设法解决了这个问题。

我有多个问题。首先,Dockerfile ENTRYPOINT部分中的系统属性顺序不太正确。的

-Dsomething=something

必须在“-jar”之前。否则它将无法在Docker中运行。我还没有找到任何官方文件说明这一点,但这就是它对我有效的方式。因此正确的ENDPOINT定义如下所示:
ENTRYPOINT ["java", "-DlogFileLocation=/tao-elszamolas/logs", "-jar", "tao-elszamolas-config.jar"]

其次,当我使用docker run命令将一些文件夹安装到容器上时,如下所示:
-v /tao-elszamolas/logs:/tao-elszamolas/logs

如果默认情况下Docker容器中的文件夹不存在,则不会写入日志文件。但是,如果我在Dockerfile中的ENTRYPOINT之前的某个时间创建了该文件夹,则日志记录很好,系统会将其日志写入主机。我也没有找到任何说明这些事实的文档,但这是我的经验。

关于docker - 从Docker容器登录到主机不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54303537/

相关文章:

ubuntu - 在 ubuntu 上设置 Mesos DNS

docker - 有什么方法可以在容器docker内部的文件和主机之间创建链接?

python - 如何使用 yml 文件创建 conda 环境而不出现此错误?

visual-studio - 使用 Visual Studio Docker 组合支持运行测试

docker - traefik 主机名适用于 Web 应用程序,但不适用于 mongodb

python - 在 Python Alpine Docker 中加载共享库 libresolv.so.2 时出错

docker - 将Docker暴露给世界

python - 使用 Nose/unittest 忽略测试文件

spring-boot - Docker - java netty_tcnative 的问题

docker - 具有相对体积路径的tutum stackfile