容器没有提及dockerfile – 多个容器

我正在处理一个主要的内核应用程序,该程序使用mysqlinfluxdb作为数据库,并使用grafana以graphics方式显示数据。 我使用Dockerfile docker-compose和各个Dockerfile为每个容器创build单独的容器。

文件夹结构是这样的:

dockercompose

  • 泊坞窗,compose.yml
  • 核心
    • Dockerfilekernel
    • app.war
  • SQLDB
    • Dockerfilesqldb
    • dump.sql
    • startup.sh
  • grafana
    • Dockerfilegrafana
    • grafana.env
    • run.sh
  • tsdbdb
    • Dockerfiletsdb
    • influxdb.env
    • init-influxdb.sh
    • entrypoint.sh

内核构build的容器,但在检查日志时,显示influxdb的日志,与检查tsdbdb容器的日志时显示的日志相同。

docker-compose代码:

 version: '3' services: mysqldb: build: context: ./sqldb dockerfile: Dockerfilesqldb container_name: sql command: mysqld --user=root --verbose volumes: - ./sqldb:/app/sql restart: always expose: - "3306" ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=secretpassword - MYSQL_DATABASE=dbtest - MYSQL_USER=user - MYSQL_PASSWORD=password - MYSQL_ALLOW_EMPTY_PASSWORD=yes tsdbdb: build: context: ./tsdbdb dockerfile: Dockerfiletsdb container_name: influx restart: always expose: - "8083" - "8086" ports: - "8083:8083" - "8086:8086" volumes: - ./tsdb:/app/tsdb env_file: - './tsdbdb/influxdb.env' grafana: build: context: ./grafana dockerfile: Dockerfilegrafana container_name: grafana env_file: - './grafana/grafana.env' expose: - "3000" ports: - "3003:3000" links: - tsdbdb web: build: context: ./kernel dockerfile: Dockerfilekernel container_name: kernel restart: always expose: - "8080" ports: - "8082:8080" depends_on: - mysqldb links: - tsdbdb - mysqldb volumes: - ./kernel:/app/kernel 

内核的Dockerfile

 FROM java:openjdk-8-jre-alpine ENV JHIPSTER_SLEEP 0 WORKDIR /app/kernel # add directly the war ADD *.war /app/kernel/app.war RUN sh -c 'touch /app/kernel/app.war' VOLUME /tmp EXPOSE 8080 CMD echo "The application will start in ${JHIPSTER_SLEEP}s..." && \ sleep ${JHIPSTER_SLEEP} && \ java -Djava.security.egd=file:/dev/./urandom -jar /app/kernel/app.war 

用于influxdb的Dockerfile, 以防万一

 FROM buildpack-deps:stretch-curl WORKDIR /app/tsdb RUN set -ex && \ for key in \ 05CE15085FC09D18E99EFB22684A14CF2582E0C5 ; \ do \ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \ gpg --keyserver pgp.mit.edu --recv-keys "$key" || \ gpg --keyserver keyserver.pgp.com --recv-keys "$key" ; \ done ENV INFLUXDB_VERSION 1.2.4 ENV INFLUXDB_ADMIN_PASSWORD secretpassword ENV INFLUXDB_DB master_db RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" && \ case "${dpkgArch##*-}" in \ amd64) ARCH='amd64';; \ arm64) ARCH='arm64';; \ armhf) ARCH='armhf';; \ armel) ARCH='armel';; \ *) echo "Unsupported architecture: ${dpkgArch}"; exit 1;; \ esac && \ wget -q https://dl.influxdata.com/influxdb/releases/influxdb_${INFLUXDB_VERSION}_${ARCH}.deb.asc && \ wget -q https://dl.influxdata.com/influxdb/releases/influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && \ gpg --batch --verify influxdb_${INFLUXDB_VERSION}_${ARCH}.deb.asc influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && \ dpkg -i influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && \ rm -f influxdb_${INFLUXDB_VERSION}_${ARCH}.deb* COPY influxdb.conf /etc/influxdb/influxdb.conf EXPOSE 8086 VOLUME /var/lib/influxdb COPY entrypoint.sh /entrypoint.sh COPY init-influxdb.sh /init-influxdb.sh ENTRYPOINT ["/entrypoint.sh"] CMD ["influxd"] 

这可能是由于一个愚蠢的错误发生的,但我无法find问题到底在哪里。

所以我可以通过下面的方法解决这个问题 –

将服务名称从web更改为内核,并在docker-compose.yml添加了内核服务的命令行:

 version: '3' services: mysqldb: build: context: ./sqldb dockerfile: Dockerfilesqldb container_name: sql command: mysqld --user=root --verbose # volumes: # - ./sqldb:/app/sql restart: always # expose: # - "3306" ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=secretpassword - MYSQL_DATABASE=dbtest - MYSQL_USER=user - MYSQL_PASSWORD=password - MYSQL_ALLOW_EMPTY_PASSWORD=yes tsdbdb: build: context: ./tsdbdb dockerfile: Dockerfiletsdb container_name: influx restart: always # expose: # - "8083" # - "8086" ports: - "8083:8083" - "8086:8086" # volumes: # - ./tsdb:/app/tsdb env_file: - './tsdbdb/influxdb.env' grafana: build: context: ./grafana dockerfile: Dockerfilegrafana container_name: grafana env_file: - './grafana/grafana.env' expose: - "3000" ports: - "3003:3000" links: - tsdbdb kernel: build: context: ./kernel dockerfile: Dockerfilekernel container_name: kernel command: java -Djava.security.egd=file:/dev/./urandom -jar /app/kernel/app.war restart: always # expose: # - "8080" ports: - "8082:8080" links: - tsdbdb - mysqldb # volumes: # - ./kernel:/app/kernel 

虽然我不确定为什么只有添加命令才能解决问题。