я был ранее запущен контейнер Docker для моего веб-приложения ниже:Перенос сценария запуска Docker для создания файла - postgres не запускается?
echo Starting postgres container...
docker run -d -p 5432:5432 --name db my_db
echo Postgres container started
echo Starting memcached container...
docker run -d -p 11211:11211 --name mem memcached
echo Memcached container started
echo Starting web container...
docker run -d -p 8000:8080 --name web --link db:postgres --link mem:memcache my_web_app
echo Web container started
echo Waiting for tomcat to initialize...
sleep 5
echo curling logon.jsf
curl http://111.111.11.111:8000/app/logon.jsf #Real URL redacted
echo Application started
Который стал ниже докер-сочинять сценарий:
version: '2'
services:
web:
image: tomcat:7.0.69-jre8
build: ./ci
ports:
- "8000:8080"
depends_on:
- db
- mem
db:
image: postgres:9.4.7
build: ./db
ports:
- "5432:5432"
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin
mem:
image: memcached
ports:
- "11211:11211"
Когда я запускаю контейнер, похоже, Postgres это не (соединение отказано, netstat -al | grep postgres не показывает его), и, таким образом, приложение не работает. Я рассмотрел изменение, которое я сделал, и понял, что docker-compose.yml не имеет аналога для команды tomcat sleep и curl, которую я дал в сценарии запуска - не так ли? Я не мог найти информацию в Интернете относительно правильного аналога. Здесь есть что-то еще? Пожалуйста, сообщите, если требуются какие-либо дополнительные данные.
EDIT: Докер пс выходы:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a942be02fc22 tomcat:7.0.69-jre8 "catalina.sh run" 5 minutes ago Up About a minute 0.0.0.0:8000->8080/tcp memcachedocker_web_1
fd6074cf8ec9 postgres:9.4.7 "/docker-entrypoint.s" 5 minutes ago Up About a minute 0.0.0.0:5432->5432/tcp memcachedocker_db_1
ce18771fee28 memcached "/entrypoint.sh memca" 5 minutes ago Up About a minute 0.0.0.0:11211->11211/tcp memcachedocker_mem_1
и журналы для контейнера:
Success. You can now start the database server using:
postgres -D /var/lib/postgresql/data
or
pg_ctl -D /var/lib/postgresql/data -l logfile start
waiting for server to start....LOG: database system was shut down at 2016-06-01 13:09:23 UTC
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
done
server started
CREATE DATABASE
CREATE ROLE
/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sql
CREATE DATABASE
LOG: received fast shutdown request
LOG: aborting any active transactions
LOG: autovacuum launcher shutting down
LOG: shutting down
waiting for server to shut down....LOG: database system is shut down
done
server stopped
PostgreSQL init process complete; ready for start up.
LOG: database system was shut down at 2016-06-01 13:09:25 UTC
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
и, таким образом, внутри контейнера:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.11:44095 0.0.0.0:* LISTEN
tcp 0 0 172.18.0.4:38868 132.246.2.23:80 TIME_WAIT
tcp 0 0 172.18.0.4:36424 5.153.231.35:80 TIME_WAIT
tcp6 0 0 127.0.0.1:8005 :::* LISTEN
tcp6 0 0 :::8009 :::* LISTEN
tcp6 0 0 :::8080 :::* LISTEN
tcp6 0 0 172.18.0.4:47522 172.18.0.2:11211 ESTABLISHED
tcp6 0 0 172.18.0.4:47518 172.18.0.2:11211 ESTABLISHED
tcp6 0 0 172.18.0.4:47524 172.18.0.2:11211 ESTABLISHED
tcp6 0 0 172.18.0.4:47520 172.18.0.2:11211 ESTABLISHED
tcp6 0 0 172.18.0.4:47516 172.18.0.2:11211 ESTABLISHED
tcp6 0 0 172.18.0.4:47514 172.18.0.2:11211 ESTABLISHED
udp 0 0 172.18.0.4:48360 10.0.2.3:53 ESTABLISHED
udp 0 0 127.0.0.11:40276 0.0.0.0:*
Мы можем видеть что контейнер memcached запущен и запущен, однако postgres - это bsent. Единственное, что работает на интерфейсе localhost, связано с 8005, и это не postgres. Я должен добавить, наконец, что я могу telnet memcached на своем порту из веб-контейнера и подтвердить его работу, однако я не могу сделать то же самое с postgres, и я не уверен, почему.
«похоже, что постгрес уже не работает» Ну, не так ли? Вот что такое 'docker ps' (или' docker-compose ps'). И если он провалил 'docker logs', может показать вам, почему. Кроме того, что-то ужасно неправильно с отступом документа 'docker-compose.yml', который вы опубликовали; если вы потратите немного времени, чтобы очистить его, вы избегаете ответов в строках «это не может работать». – larsks
Приношу свои извинения, я всегда сталкиваюсь с вводом кода в Stack Overflow - он только идрит первую строку правильно, и я должен сделать все остальное вручную. Да, согласно доккеру ps, контейнер работает, а на правильном порту - я добавил этот ответ, журналы и результат netstat. –
Когда я подключился к контейнеру _db_1, я вижу, что там работает postgres. Как я могу преодолеть разрыв? –