Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker:OCI运行时创建失败:container\u linux.go:349:启动容器进程导致“exec:\“java\”:在$PATH中找不到可执行文件_Java_Spring_Postgresql_Spring Boot_Docker - Fatal编程技术网

Docker:OCI运行时创建失败:container\u linux.go:349:启动容器进程导致“exec:\“java\”:在$PATH中找不到可执行文件

Docker:OCI运行时创建失败:container\u linux.go:349:启动容器进程导致“exec:\“java\”:在$PATH中找不到可执行文件,java,spring,postgresql,spring-boot,docker,Java,Spring,Postgresql,Spring Boot,Docker,我有一个JavaSpring启动应用程序,它可以与Postgres数据库一起工作。我想用Docker来处理这两个问题。最初,我创建了docker-compose.yml文件,如下所示: version: '3.2' services: postgres: restart: always container_name: sample_db image: postgres:10.4 ports: - '5432:5432' environmen

我有一个JavaSpring启动应用程序,它可以与Postgres数据库一起工作。我想用Docker来处理这两个问题。最初,我创建了docker-compose.yml文件,如下所示:

version: '3.2'
services:
  postgres:
    restart: always
    container_name: sample_db
    image: postgres:10.4
    ports:
      - '5432:5432'
    environment:
         - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
         - POSTGRES_USER=${POSTGRES_USER}
         - POSTGRES_DB=${POSTGRES_DB}
# APP**
  web:
    build: .
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/test
    expose:
      - '8080'
    ports:
      - '8080:8080'
然后,在application.properties文件中,我定义了以下属性

server.port=8080
spring.jpa.generate-ddl=true


spring.datasource.url=jdbc:postgresql://postgres:5432/test
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.flyway.baseline-on-migrate=true
spring.flyway.enabled=true

# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = validate
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: true
此外,我还在我的项目目录中创建了一个Dockerfile,如下所示:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
EXPOSE 8080
RUN mkdir -p /app/
RUN mkdir -p /app/logs/
COPY target/household-0.0.1-SNAPSHOT.jar /app/app.jar
FROM postgres
ENV POSTGRES_PASSWORD postgres
ENV POSTGRES_DB testdb
COPY schema.sql /docker-entrypoint-initdb.d/
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]
我发出了这些命令,结果出现了如下所示的错误

清洁包装 docker build./-t springbootapp 码头工人整理

请任何人帮忙

FROM postgres行创建第二个基于PostgreSQL数据库服务器的映像。这条线以上的一切实际上都被忽略了。因此,您的最终映像运行的是第二个数据库,而不是JVM

您不需要这一行,也不需要扩展数据库服务器来运行客户机。您可以删除此行,应用程序将启动

您还必须将该模式文件单独放入数据库容器中。只需将文件绑定到卷中即可:在docker-compose.yml中,文件是一个简单的路径。如果您的应用程序中有数据库迁移系统,则在启动时运行迁移将是一种更可靠的方法。

来自postgres行创建第二个基于PostgreSQL数据库服务器的映像。这条线以上的一切实际上都被忽略了。因此,您的最终映像运行的是第二个数据库,而不是JVM

您不需要这一行,也不需要扩展数据库服务器来运行客户机。您可以删除此行,应用程序将启动

您还必须将该模式文件单独放入数据库容器中。只需将文件绑定到卷中即可:在docker-compose.yml中,文件是一个简单的路径。如果您的应用程序中有数据库迁移系统,则在启动时运行迁移将是一种更可靠的方法。

application.properties文件内容与问题无关,所以您可以删除它。 让我们看看你的Dockerfile,我将删除不相关的代码

FROM openjdk:8-jdk-alpine
COPY target/household-0.0.1-SNAPSHOT.jar /app/app.jar

FROM postgres
COPY schema.sql /docker-entrypoint-initdb.d/
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]
所以您使用的是多级构建,只需将文件从主机复制到第一个阶段。 作为最后一个阶段,您将使用postgres映像并告知将ENTRYPOINT设置为java,但postgres映像中不存在java

您应该更改的内容:

您应该将postgres containe与java容器分开,就像您在docker-compose.yml文件中一样,第二个建议是使用CMD而不是ENTRYPOINT。 您的最终Dockerfile应该是

FROM openjdk:8-jdk-alpine
COPY target/household-0.0.1-SNAPSHOT.jar /app/app.jar
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]
application.properties文件内容与问题无关,所以您可以将其删除。 让我们看看你的Dockerfile,我将删除不相关的代码

FROM openjdk:8-jdk-alpine
COPY target/household-0.0.1-SNAPSHOT.jar /app/app.jar

FROM postgres
COPY schema.sql /docker-entrypoint-initdb.d/
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]
所以您使用的是多级构建,只需将文件从主机复制到第一个阶段。 作为最后一个阶段,您将使用postgres映像并告知将ENTRYPOINT设置为java,但postgres映像中不存在java

您应该更改的内容:

您应该将postgres containe与java容器分开,就像您在docker-compose.yml文件中一样,第二个建议是使用CMD而不是ENTRYPOINT。 您的最终Dockerfile应该是

FROM openjdk:8-jdk-alpine
COPY target/household-0.0.1-SNAPSHOT.jar /app/app.jar
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]

我在为Docker设置Rails应用程序时出错:

我的docker-entrypoint.sh文件位于我的应用程序的根文件夹中,包含以下内容:

#!/bin/sh

set -e

bundle exec rails server -b 0.0.0.0 -e production
在我的Dockerfile中,我用以下方式定义了我的entrypoint命令:

RUN ["chmod", "+x", "docker-entrypoint.sh"]
ENTRYPOINT ["docker-entrypoint.sh"]
但当我运行docker compose up命令时,我遇到了以下错误:

错误:for app无法启动服务app:OCI运行时创建失败:container_linux.go:349:启动容器进程导致exec:docker-entrypoint.sh:在中找不到可执行文件$ 路径:未知

下面是我如何修复它的:

指定docker-entrypoint.sh文件的实际路径,而不是:

ENTRYPOINT ["docker-entrypoint.sh"]
使用

这会告诉docker docker-entrypoint.sh文件位于应用程序的根文件夹中,如果docker-entrypoint.sh的路径不同,您也可以指定不同的路径,但请确保不会错过docker-entrypoint.sh文件路径定义的./prefix

后来我的是这样的:

RUN ["chmod", "+x", "docker-entrypoint.sh"]
ENTRYPOINT ["./docker-entrypoint.sh"]
就这些


我希望这能有所帮助

我在为Docker设置Rails应用程序时出现了以下错误:

我的docker-entrypoint.sh文件位于我的应用程序的根文件夹中,包含以下内容:

#!/bin/sh

set -e

bundle exec rails server -b 0.0.0.0 -e production
在我的Dockerfile中,我用以下方式定义了我的entrypoint命令:

RUN ["chmod", "+x", "docker-entrypoint.sh"]
ENTRYPOINT ["docker-entrypoint.sh"]
但当我运行docker compose up命令时,我遇到了以下错误:

错误:for app无法启动服务app:OCI运行时创建失败:container_linux.go:349:启动容器进程导致exec:docker-entrypoint.sh:在中找不到可执行文件$ 路径:未知

下面是我如何修复它的:

指定docker-entrypoint.sh文件的实际路径,而不是:

ENTRYPOINT ["docker-entrypoint.sh"]
使用

这告诉dock 如果docker-entrypoint.sh文件位于应用程序的根文件夹中,如果docker-entrypoint.sh的路径不同,您也可以指定不同的路径,但请确保您不会错过docker-entrypoint.sh文件路径定义的./prefix

后来我的是这样的:

RUN ["chmod", "+x", "docker-entrypoint.sh"]
ENTRYPOINT ["./docker-entrypoint.sh"]
就这些


我希望这有帮助

您似乎有错误的权限。尝试在sudoYou尝试启动与Oracle客户端链接的可执行文件时运行docker compose。你一定是做错了什么。你似乎有错误的权限。尝试在sudoYou尝试启动与Oracle客户端链接的可执行文件时运行docker compose。你一定是做错了什么。