Docker:OCI运行时创建失败:container\u linux.go:349:启动容器进程导致“exec:\“java\”:在$PATH中找不到可执行文件
我有一个JavaSpring启动应用程序,它可以与Postgres数据库一起工作。我想用Docker来处理这两个问题。最初,我创建了docker-compose.yml文件,如下所示: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
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。你一定是做错了什么。