【问题标题】:Unable to open application after docker-composedocker-compose 后无法打开应用程序
【发布时间】:2017-11-16 05:03:21
【问题描述】:

编写 docker 文件后,一切正常,但在完成 docker ps 之后 它显示没有容器正在运行。

下面是我的docker-compose.yml

version: '3'
services:
  web-app:
    build:
      context: .
      dockerfile: web-app/Dockerfile
    ports:
      - 8080:8080
    links:
      - app-db

  app-db:
    build:
      context: .
      dockerfile: app-db/Dockerfile

    environment:
    - MYSQL_ROOT_PASSWORD=password
    - MYSQL_DATABASE=Optimize
    ports:
      - 3306:3306

Dockerfile 对于网络应用程序就像

FROM aallam/oracle-java
    
ENV DEBIAN_FRONTEND noninteractive
ENV TOMCAT_MAJOR_VERSION=8
ENV TOMCAT_VERSION=8.5.14
ENV TOMCAT_HOME=/opt/tomcat

RUN apt-get update && \
  rm -rf /var/lib/apt/lists/*

WORKDIR /tmp

RUN groupadd tomcat && \
    useradd -s /bin/false -g tomcat -d $TOMCAT_HOME tomcat && \
    mkdir $TOMCAT_HOME && \
    #wget http://mirrors.standaloneinstaller.com/apache/tomcat/tomcat-$TOMCAT_MAJOR_VERSION/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz && \
    wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.23/bin/apache-tomcat-8.0.23.tar.gz && \
    tar xzvf apache-tomcat-8*tar.gz -C $TOMCAT_HOME --strip-components=1 && \
    chown -R tomcat:tomcat $TOMCAT_HOME && \
    chmod -R g+r $TOMCAT_HOME/conf && \
    chmod g+x $TOMCAT_HOME/conf && \
    rm -rf apache-tomcat-$TOMCAT_VERSION.tar.gz

WORKDIR /

ADD /web-app/tomcat-run.sh /tomcat-run.sh
ADD /web-app/run.sh /run.sh
ADD /web-app/supervisord-tomcat.conf /etc/supervisor/conf.d/supervisord-tomcat.conf
ADD /web-app/settings.xml $TOMCAT_HOME/conf/settings.xml
ADD /web-app/tomcat-users.xml $TOMCAT_HOME/conf/tomcat-users.xml
ADD /web-app/context.xml $TOMCAT_HOME/webapps/manager/META-INF/context.xml
RUN chmod 755 /*.sh

COPY /web-app/target/*.war $TOMCAT_HOME/webapps/

expose 8080
ENTRYPOINT ["/run.sh"]

而数据库的Dockerfile 就像

FROM aallam/oracle-java
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
  apt-get -yq install mysql-server supervisor && \
  rm -rf /var/lib/apt/lists/*

#WORKDIR /
ADD /app-db/bind_0.cnf /etc/mysql/conf.d/bind_0.cnf
ADD /app-db/mysql-run.sh /mysql-run.sh
ADD /app-db/supervisord-mysql.conf /etc/supervisor/conf.d/supervisord-mysql.conf

VOLUME ["/var/lib/mysql"]
expose 3306

docker-compose up -d 之后是终端的输出

user@ubuntu:~/正在创建 optdocker_app-db_1

user@ubuntu:~/正在创建 optdocker_web-app_1

添加docker-compose logsnetstat -tln

user@ubuntu:~/Opt-Docker$ netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:32000         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 :::40645                :::*                    LISTEN     
tcp6       0      0 127.0.0.1:9000          :::*                    LISTEN     
tcp6       0      0 127.0.0.1:9001          :::*                    LISTEN     
tcp6       0      0 :::10000                :::*                    LISTEN     
tcp6       0      0 127.0.0.1:36241         :::*                    LISTEN     
tcp6       0      0 :::42801                :::*                    LISTEN     
tcp6       0      0 :::37971                :::*                    LISTEN     
user@ubuntu:~/Opt-Docker$ docker-compose logs
Attaching to optdocker_web-app_1, optdocker_app-db_1
user@ubuntu:~/Opt-Docker$ 

docker ps 没有提供任何东西。谁能告诉我在哪里以及我做错了什么

docker ps -a 输出

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
3a93140ab6f4        optdocker_web-app   "/bin/bash"         16 minutes ago      Exited (0) 16 minutes ago                       optdocker_web-app_1
53b7ec265fac        optdocker_app-db    "/bin/bash"         16 minutes ago      Exited (0) 16 minutes ago                       optdocker_app-db_1

【问题讨论】:

  • 你能添加一些日志或输出吗?
  • 并确保端口 3306 未被任何应用程序使用。
  • 你的意思是docker-compose logs
  • 是的,如果有任何应用程序日志也请
  • run.sh 是做什么的?能否提供脚本的内容?

标签: docker docker-compose dockerfile


【解决方案1】:

像这样在 web-app 中更新 Dockerfile

FROM aallam/oracle-java

ENV DEBIAN_FRONTEND noninteractive
ENV TOMCAT_MAJOR_VERSION=8
ENV TOMCAT_VERSION=8.5.14
ENV TOMCAT_HOME=/opt/tomcat

RUN apt-get update && \
apt-get -yq install supervisor && \
  rm -rf /var/lib/apt/lists/*

WORKDIR /tmp

RUN groupadd tomcat && \
    useradd -s /bin/false -g tomcat -d $TOMCAT_HOME tomcat && \
    mkdir $TOMCAT_HOME && \
    #wget http://mirrors.standaloneinstaller.com/apache/tomcat/tomcat-$TOMCAT_MAJOR_VERSION/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz && \
    wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.23/bin/apache-tomcat-8.0.23.tar.gz && \
    tar xzvf apache-tomcat-8*tar.gz -C $TOMCAT_HOME --strip-components=1 && \
    chown -R tomcat:tomcat $TOMCAT_HOME && \
    chmod -R g+r $TOMCAT_HOME/conf && \
    chmod g+x $TOMCAT_HOME/conf && \
    rm -rf apache-tomcat-$TOMCAT_VERSION.tar.gz

WORKDIR /

ADD /web-app/tomcat-run.sh /tomcat-run.sh
ADD /web-app/run.sh /run.sh
ADD /web-app/supervisord-tomcat.conf /etc/supervisor/conf.d/supervisord-tomcat.conf
ADD /web-app/settings.xml $TOMCAT_HOME/conf/settings.xml
ADD /web-app/tomcat-users.xml $TOMCAT_HOME/conf/tomcat-users.xml
ADD /web-app/context.xml $TOMCAT_HOME/webapps/manager/META-INF/context.xml
RUN chmod 755 /*.sh

COPY /web-app/target/*.war $TOMCAT_HOME/webapps/

expose 8080
ENTRYPOINT ["/run.sh"]

web-appapp-db 文件夹复制 run.sh。

像这样在 app-db 中更新 Dockerfile

FROM aallam/oracle-java
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
  apt-get -yq install mysql-server supervisor && \
  rm -rf /var/lib/apt/lists/*

#WORKDIR /
ADD /app-db/run.sh /run.sh
ADD /app-db/bind_0.cnf /etc/mysql/conf.d/bind_0.cnf
ADD /app-db/mysql-run.sh /mysql-run.sh
ADD /app-db/supervisord-mysql.conf /etc/supervisor/conf.d/supervisord-mysql.conf

VOLUME ["/var/lib/mysql"]
expose 3306
ENTRYPOINT ["/run.sh"]

然后运行命令:

docker-compose up
docker ps 

输出将是这样,系统启动:

CONTAINER ID        IMAGE               COMMAND             CREATED                  STATUS              PORTS                    NAMES
a60682b914a4        test_web-app        "/run.sh"           Less than a second ago   Up 9 seconds        0.0.0.0:8080->8080/tcp   test_web-app_1
607522cac623        test_app-db         "/run.sh"           Less than a second ago   Up 9 seconds        0.0.0.0:3306->3306/tcp   test_app-db_1

要在app-db 容器中连接 MySQL 服务器,您项目中的 JDBC 连接 url 应该是这样的:

"jdbc:mysql://DOCKER_MACHINE_IP:3306/DB_NAME".

app-db 容器端,从命令行访问 MySQL,为具有 DOCKER_MACHINE_IP 的用户创建并授予权限:

> CREATE USER 'root'@'DOCKER_MACHINE_IP' IDENTIFIED BY 'root_password'; 
> GRANT ALL ON *.* to root@'DOCKER_MACHINE_IP' IDENTIFIED BY 'root_password';
> FLUSH PRIVILEGES;

【讨论】:

  • 容器已经启动,但我猜它没有连接到 MySQL here are the logs 任何人都可以帮助我
  • 似乎目标文件夹下的项目在连接数据库之前无法启动。您可以添加 catalina 和 localhost 完整日志吗?另外请检查mysql是否有你要创建的数据库。
  • 是的,没有我想创建的数据库,也请找到logs here
  • 部署过程看起来很健康。 SEVERE 日志与stackoverflow.com/questions/24850091stackoverflow.com/questions/3320400 相关。
  • 我编辑了从应用程序访问 MySQL 的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多