首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当与主机数据目录映射时,Docker容器数据变为空白。

问当与主机数据目录映射时,Docker容器数据变为空白。
EN

Stack Overflow用户
提问于 2017-02-25 19:52:05
回答 3查看 598关注 0票数 1

我创建了如下所示的Dockerfile。只是把一个应用程序加到tomcat网络应用程序中。

代码语言:javascript
复制
FROM tomcat:9-alpine  
ADD ./Spring3HibernateApp.war /usr/local/tomcat/webapps/  
VOLUME /usr/local/tomcat/webapps  
EXPOSE 8080  
CMD ["catalina.sh","run"] 

创建一个新的映像并将其命名为test-app:0.1

代码语言:javascript
复制
docker build –t test-app:0.1 .

像下面这样旋转新的容器,在这里我使用主机数据目录来挂载一个容器数据目录,这样我就可以修改或者列出容器的webapp内容。

代码语言:javascript
复制
docker run -d --name=tomcat-01 -p 80:8080 --net=bridge -v /vol2/docker/sampleapp/tomcat-webapps:/usr/local/tomcat/webapps test-app:0.1

我的问题:当我看到/vol2/docker/sampleapp/tomcat时,我发现它是空白的。然而,我认为它应该从位置/usr/local/tomcat/webapp中列出容器的内容。它实际上也在清理容器数据,而不是将其持久化并加载到主机数据目录中。

,我有遗漏什么吗?

如果我只是从上面的命令中删除-v,它可以很好地工作,并且我能够看到默认停靠器卷位置中的内容,但是当我添加-v时却不能得到相同的结果。

我理解错了吗?我指的是通过链接https://docs.docker.com/engine/tutorials/dockervolumes/将主机目录挂载为数据卷。

当我使用mysql映像并从中提取新容器时,相同的命令工作正常。

代码语言:javascript
复制
docker run -d --name=mysql-01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=employeedb --net=bridge -v /vol2/docker/sampleapp/mysql-data:/var/lib/mysql mysql

这一次,我能够看到/vol2/docker/sampleapp/mysql-data中的容器数据。

EN

回答 3

Stack Overflow用户

发布于 2017-02-25 22:02:56

挂载卷时,要覆盖容器内的现有目录。如果要从容器外部部署.war或.jar文件,则需要执行以下操作:

代码语言:javascript
复制
FROM tomcat:9-alpine
VOLUME /usr/local/tomcat/webapps
EXPOSE 8080
CMD ["catalina.sh","run"]

构建它:docker build –t test-app:0.1 .

然后像这样运行容器:docker run -d --name=tomcat-01 -p 80:8080 -v /vol2/docker/sampleapp/tomcat-webapps:/usr/local/tomcat/webapps test-app:0.1将Spring3HibernateApp.war放置在/vol2/docker/sampleapp/tomcat-webapps目录中。一旦你这样做,你可以去docker logs -f tomcat-01和观看tomcat部署的应用程序,就像在我的sample.war下面。

代码语言:javascript
复制
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8-openjdk/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
25-Feb-2017 21:58:23.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/9.0.0.M17
25-Feb-2017 21:58:23.717 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Jan 10 2017 20:59:20 UTC
25-Feb-2017 21:58:23.717 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         9.0.0.0
25-Feb-2017 21:58:23.717 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
25-Feb-2017 21:58:23.717 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            3.13.0-93-generic
25-Feb-2017 21:58:23.717 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
25-Feb-2017 21:58:23.717 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-1.8-openjdk/jre
25-Feb-2017 21:58:23.718 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_111-internal-alpine-r0-b14
25-Feb-2017 21:58:23.718 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
25-Feb-2017 21:58:23.718 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
25-Feb-2017 21:58:23.718 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
25-Feb-2017 21:58:23.719 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
25-Feb-2017 21:58:23.719 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
25-Feb-2017 21:58:23.719 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
25-Feb-2017 21:58:23.720 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
25-Feb-2017 21:58:23.720 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
25-Feb-2017 21:58:23.721 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
25-Feb-2017 21:58:23.721 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
25-Feb-2017 21:58:23.721 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library 1.2.10 using APR version 1.5.2.
25-Feb-2017 21:58:23.721 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
25-Feb-2017 21:58:23.722 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
25-Feb-2017 21:58:23.725 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized (OpenSSL 1.0.2j  26 Sep 2016)
25-Feb-2017 21:58:23.838 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
25-Feb-2017 21:58:23.861 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
25-Feb-2017 21:58:23.868 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
25-Feb-2017 21:58:23.870 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
25-Feb-2017 21:58:23.874 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 653 ms
25-Feb-2017 21:58:23.908 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
25-Feb-2017 21:58:23.908 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/9.0.0.M17
25-Feb-2017 21:58:23.951 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /usr/local/tomcat/webapps/sample.war
25-Feb-2017 22:00:25.223 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [120,610] milliseconds.
25-Feb-2017 22:00:25.253 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /usr/local/tomcat/webapps/sample.war has finished in 121,302 ms
25-Feb-2017 22:00:25.258 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-8080]
25-Feb-2017 22:00:25.270 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [ajp-nio-8009]
25-Feb-2017 22:00:25.278 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 121403 ms

最后,MySQL卷挂载的工作方式和它一样,因为在构建VOLUME /var/lib/mysql之前,基本映像已经公开了卷,如果您想要在catalina应用程序中发生相同的事情,您必须复制他们的Dockerfile并向其中添加一个VOLUME /usr/local/tomcat/webapps/,如下所示。

代码语言:javascript
复制
FROM openjdk:8-jre-alpine

ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME

# let "Tomcat Native" live somewhere isolated
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR

RUN apk add --no-cache gnupg

# see https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/KEYS
# see also "update.sh" (https://github.com/docker-library/tomcat/blob/master/update.sh)
ENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
RUN set -ex; \
    for key in $GPG_KEYS; do \
        gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
    done

ENV TOMCAT_MAJOR 9
ENV TOMCAT_VERSION 9.0.0.M17

# https://issues.apache.org/jira/browse/INFRA-8753?focusedCommentId=14735394#comment-14735394
ENV TOMCAT_TGZ_URL https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz
# not all the mirrors actually carry the .asc files :'(
ENV TOMCAT_ASC_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc

RUN set -x \
    \
    && apk add --no-cache --virtual .fetch-deps \
        ca-certificates \
        tar \
        openssl \
    && wget -O tomcat.tar.gz "$TOMCAT_TGZ_URL" \
    && wget -O tomcat.tar.gz.asc "$TOMCAT_ASC_URL" \
    && gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz \
    && tar -xvf tomcat.tar.gz --strip-components=1 \
    && rm bin/*.bat \
    && rm tomcat.tar.gz* \
    \
    && nativeBuildDir="$(mktemp -d)" \
    && tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1 \
    && apk add --no-cache --virtual .native-build-deps \
        apr-dev \
        gcc \
        libc-dev \
        make \
        "openjdk${JAVA_VERSION%%[-~bu]*}"="$JAVA_ALPINE_VERSION" \
        openssl-dev \
    && ( \
        export CATALINA_HOME="$PWD" \
        && cd "$nativeBuildDir/native" \
        && ./configure \
            --libdir="$TOMCAT_NATIVE_LIBDIR" \
            --prefix="$CATALINA_HOME" \
            --with-apr="$(which apr-1-config)" \
            --with-java-home="$(docker-java-home)" \
            --with-ssl=yes \
        && make -j$(getconf _NPROCESSORS_ONLN) \
        && make install \
    ) \
    && runDeps="$( \
        scanelf --needed --nobanner --recursive "$TOMCAT_NATIVE_LIBDIR" \
            | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
            | sort -u \
            | xargs -r apk info --installed \
            | sort -u \
    )" \
    && apk add --virtual .tomcat-native-rundeps $runDeps \
    && apk del .fetch-deps .native-build-deps \
    && rm -rf "$nativeBuildDir" \
    && rm bin/tomcat-native.tar.gz

# verify Tomcat Native is working properly
RUN set -e \
    && nativeLines="$(catalina.sh configtest 2>&1)" \
    && nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" \
    && nativeLines="$(echo "$nativeLines" | sort -u)" \
    && if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then \
        echo >&2 "$nativeLines"; \
        exit 1; \
    fi
ADD ./Spring3HibernateApp.war /
VOLUME ${CATALINA_HOME}
EXPOSE 8080
CMD ["catalina.sh", "run"]
票数 1
EN

Stack Overflow用户

发布于 2017-02-25 20:43:15

恐怕您的VOLUME /usr/local/tomcat/webapps清除了这个目录。

你得换个方法。

票数 0
EN

Stack Overflow用户

发布于 2017-02-25 21:43:04

当您将主机目录挂载到容器中时,该路径上容器内的任何内容都不再可用。它仍然存在于底层图像或卷中,但它将被您的卷挂载所取代。

这就是主机卷挂载的工作方式:主机上目录中的任何内容都放在容器中,并且优先于以前在该路径中的任何内容(如果有的话)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42460873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档