[英]How to define hostname into docker-compose.yml for MongoDB and Spring Boot
[英]How fix mounting issue while using docker-compose.yml on test containers
我正在使用测试容器运行一些测试并使用https://www.testcontainers.org/modules/docker_compose/来旋转一些用于我的测试的容器。 与通用容器支持类似,也可以运行docker-compose.yml文件中指定的定制服务集。
这对于已在dev或其他环境中使用Docker Compose来定义应用程序可能依赖的服务的项目非常有用。
这是我的代码,包括docker-compose.yml
@ClassRule
public static DockerComposeContainer environment =
new DockerComposeContainer(new File("src/test/resources/docker-compose.yml"));
这是我的yml文件的内容:
version: '2.0'
services:
vault:
image: vault:0.10.2
container_name: vault
ports:
- "8200:8200"
environment:
- VAULT_ADDR=http://0.0.0.0:8200
- VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200
- VAULT_DEV_ROOT_TOKEN_ID=stupid-token
volumes:
- /config/vault/start.sh:/start.sh
command: sh -c "./start.sh"
consul:
image: consul:0.8.5
container_name: consul
ports:
- "8300:8300"
- "8400:8400"
- "8500:8500"
- "8600:8600"
- "8600:8600/udp"
environment:
- SERVICE_IGNORE=true
entrypoint: sh -c "BIND_HOST=$$(echo \"$DOCKER_HOST\" | awk -F ':' '{print $$2}' | sed 's/\\/\\///'); echo $$BIND_HOST;/bin/consul agent -server -bootstrap --client=0.0.0.0 --data-dir=/tmp/consul -ui -advertise=$$BIND_HOST -domain=consul-dev"
registrator:
image: gliderlabs/registrator:v7
container_name: registrator
depends_on:
- consul
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
entrypoint: sh -c "BIND_HOST=$$(echo \"$DOCKER_HOST\" | awk -F ':' '{print $$2}' | sed 's/\\/\\///'); echo $$BIND_HOST;/bin/registrator -ip $$BIND_HOST consul://consul:8500"
postgres:
image: registry.xxx.com/xxx-postgres:9.5.9
container_name: postgres
ports:
- "5432:5432"
depends_on:
- registrator
volumes:
- /config/postgres/docker-entrypoint.sh:/docker-entrypoint.sh:ro
# - postgres-data:/var/lib/postgresql/data
environment:
- SERVICE_NAME=postgres
command: -c max_connections=4000
test-dbmigrate:
image: registry.xxx.com/test-db:master
container_name: test-dbmigrate
depends_on:
- postgres
environment:
- DEV_LOGGING=1
- DB_INIT=1
- DB_HOST=postgres
- DB_PORT=5432
- DB_USER=test
- DB_PASSWORD=xxx
- PGPASSWORD=xxx
#volumes:
# postgres-data:
我收到此错误{ "timestamp": "2019-06-11T21:08:32.320Z", "level": "ERROR", "thread": "Test worker", "logger": "🐳 [docker/compose:1.8.0]", "message": "Could not start container", "context": "default", "exception": "java.lang.IllegalStateException: Container did not start correctly.\\n\\tat org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:255)\\n\\tat org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:212)\\n\\tat org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:76)\\n\\tat org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:210)\\n\\tat org.testcontainers.containers.GenericContainer.start(GenericContainer.java:199)\\n\\tat org.testcontainers.containers.ContainerisedDockerCompose.invoke(DockerComposeContainer.java:548)\\n\\tat org.testcontainers.containers.DockerComposeContainer.runWithCompose(DockerComposeContainer.java:211)\\n\\tat org.testcontainers.containers.DockerComposeContainer.createServices(DockerComposeContainer.java:165)\\n\\tat org.testcontainers.containers.DockerComposeContainer.start(DockerComposeContainer.java:152)\\n\\tat org.testcontainers.containers.DockerComposeContainer.starting(DockerComposeContainer.java:121)\\n\\tat org.testcontainers.containers.FailureDetectingExternalResource$1.evaluate(FailureDetectingExternalResource.java:29)\\n\\tat org.junit.rules.RunRules.evaluate(RunRules.java:20)\\n\\tat org.junit.runners.ParentRunner.run(ParentRunner.java:363)\\n\\tat org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)\\n\\tat org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:106)\\n\\tat org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)\\n\\tat org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)\\n\\tat org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:66)\\n\\tat org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\\n\\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\n\\tat java.lang.reflect.Method.invoke(Method.java:498)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)\\n\\tat org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)\\n\\tat org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)\\n\\tat com.sun.proxy.$Proxy2.processTestClass(Unknown Source)\\n\\tat org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:117)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\\n\\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\n\\tat java.lang.reflect.Method.invoke(Method.java:498)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)\\n\\tat org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)\\n\\tat org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)\\n\\tat org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)\\n\\tat org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)\\n\\tat org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)\\n\\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\\n\\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\\n\\tat org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)\\n\\tat java.lang.Thread.run(Thread.java:748)\\n" } { "timestamp": "2019-06-11T21:08:32.348Z", "level": "ERROR", "thread": "Test worker", "logger": "🐳 [docker/compose:1.8.0]", "message": "Log output from the failed container:\\nCreating network \\"k66igshwvupa_default\\" with the default driver\\n\\nCreating consul\\n\\nCreating vault\\n\\nCreating registrator\\n\\nCreating postgres\\n\\n\\n\\nERROR: for postgres Cannot start service postgres: oci runtime error: container_linux.go:247: starting container process caused \\"process_linux.go:359: container init caused \\\\\\"rootfs_linux.go:54: mounting \\\\\\\\\\\\\\"/config/postgres/docker-entrypoint.sh\\\\\\\\\\\\\\" to rootfs \\\\\\\\\\\\\\"/mnt/sda1/var/lib/docker/aufs/mnt/df4d5e2dae646eab8079cee1b8a562c1b7d2d374340d01fecf4894e6ba64be8e\\\\\\\\\\\\\\" at \\\\\\\\\\\\\\"/mnt/sda1/var/lib/docker/aufs/mnt/df4d5e2dae646eab8079cee1b8a562c1b7d2d374340d01fecf4894e6ba64be8e/usr/local/bin/docker-entrypoint.sh\\\\\\\\\\\\\\" caused \\\\\\\\\\\\\\"not a directory\\\\\\\\\\\\\\"\\\\\\"\\"\\n\\n: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type\\n\\nEncountered errors while bringing up the project.\\n", "context": "default" }
{ "timestamp": "2019-06-11T21:08:32.320Z", "level": "ERROR", "thread": "Test worker", "logger": "🐳 [docker/compose:1.8.0]", "message": "Could not start container", "context": "default", "exception": "java.lang.IllegalStateException: Container did not start correctly.\\n\\tat org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:255)\\n\\tat org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:212)\\n\\tat org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:76)\\n\\tat org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:210)\\n\\tat org.testcontainers.containers.GenericContainer.start(GenericContainer.java:199)\\n\\tat org.testcontainers.containers.ContainerisedDockerCompose.invoke(DockerComposeContainer.java:548)\\n\\tat org.testcontainers.containers.DockerComposeContainer.runWithCompose(DockerComposeContainer.java:211)\\n\\tat org.testcontainers.containers.DockerComposeContainer.createServices(DockerComposeContainer.java:165)\\n\\tat org.testcontainers.containers.DockerComposeContainer.start(DockerComposeContainer.java:152)\\n\\tat org.testcontainers.containers.DockerComposeContainer.starting(DockerComposeContainer.java:121)\\n\\tat org.testcontainers.containers.FailureDetectingExternalResource$1.evaluate(FailureDetectingExternalResource.java:29)\\n\\tat org.junit.rules.RunRules.evaluate(RunRules.java:20)\\n\\tat org.junit.runners.ParentRunner.run(ParentRunner.java:363)\\n\\tat org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)\\n\\tat org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:106)\\n\\tat org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)\\n\\tat org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)\\n\\tat org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:66)\\n\\tat org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\\n\\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\n\\tat java.lang.reflect.Method.invoke(Method.java:498)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)\\n\\tat org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)\\n\\tat org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)\\n\\tat com.sun.proxy.$Proxy2.processTestClass(Unknown Source)\\n\\tat org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:117)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\\n\\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\\n\\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\n\\tat java.lang.reflect.Method.invoke(Method.java:498)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)\\n\\tat org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)\\n\\tat org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)\\n\\tat org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)\\n\\tat org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)\\n\\tat org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)\\n\\tat org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)\\n\\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\\n\\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\\n\\tat org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)\\n\\tat java.lang.Thread.run(Thread.java:748)\\n" } { "timestamp": "2019-06-11T21:08:32.348Z", "level": "ERROR", "thread": "Test worker", "logger": "🐳 [docker/compose:1.8.0]", "message": "Log output from the failed container:\\nCreating network \\"k66igshwvupa_default\\" with the default driver\\n\\nCreating consul\\n\\nCreating vault\\n\\nCreating registrator\\n\\nCreating postgres\\n\\n\\n\\nERROR: for postgres Cannot start service postgres: oci runtime error: container_linux.go:247: starting container process caused \\"process_linux.go:359: container init caused \\\\\\"rootfs_linux.go:54: mounting \\\\\\\\\\\\\\"/config/postgres/docker-entrypoint.sh\\\\\\\\\\\\\\" to rootfs \\\\\\\\\\\\\\"/mnt/sda1/var/lib/docker/aufs/mnt/df4d5e2dae646eab8079cee1b8a562c1b7d2d374340d01fecf4894e6ba64be8e\\\\\\\\\\\\\\" at \\\\\\\\\\\\\\"/mnt/sda1/var/lib/docker/aufs/mnt/df4d5e2dae646eab8079cee1b8a562c1b7d2d374340d01fecf4894e6ba64be8e/usr/local/bin/docker-entrypoint.sh\\\\\\\\\\\\\\" caused \\\\\\\\\\\\\\"not a directory\\\\\\\\\\\\\\"\\\\\\"\\"\\n\\n: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type\\n\\nEncountered errors while bringing up the project.\\n", "context": "default" }
当我给出一条相对路径时它起作用了:
volumes:
- ./docker-entrypoint.sh:/docker-entrypoint.sh
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.