Ответ 1
Ссылки были заменены сетями. Docker описывает их как устаревшую функцию, которую вам следует избегать. Вы можете безопасно удалить ссылку, и два контейнера смогут ссылаться друг на друга по их имени службы (или имя_контейнера).
С compose ссылки имеют побочный эффект создания подразумеваемой зависимости. Вы должны заменить это более явным разделом depends_on, чтобы приложение не пыталось запустить без или до начала повтора.
В стороне я не поклонник жесткого кодирования container_name, если вы не уверены, что это единственный контейнер, который будет существовать с этим именем на хосте, и вам нужно будет ссылаться на него из docker cli по имени. Без имени контейнера docker-compose даст ему менее интуитивное имя, но также даст ему псевдоним redis в сети, что именно то, что вам нужно для создания контейнеров в контейнерах. Итак, конечный результат с этими предложениями:
version: '2'
# do not forget the version line, this file syntax is invalid without it
services:
redis:
image: redis:latest
ports:
- "6379:6379"
networks:
- lognet
app:
container_name: web-app
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ".:/webapp"
depends_on:
- redis
networks:
- lognet
networks:
lognet:
driver: bridge